From 9dfe08b8a46fca26eea76cbdd6e3d05537428374 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Tue, 17 Dec 2024 07:09:20 +0100 Subject: [PATCH] Minor fixes --- .history/lang/en_20241207230434.json | 445 ++++++ .history/lang/en_20241208160041.json | 446 ++++++ .history/lang/en_20241208160046.json | 448 ++++++ .history/lang/en_20241208160049.json | 450 ++++++ .history/lang/en_20241208160052.json | 450 ++++++ .history/lang/en_20241208160053.json | 451 ++++++ .history/lang/en_20241208160057.json | 450 ++++++ .history/lang/en_20241208160100.json | 450 ++++++ .history/lang/en_20241208160103.json | 451 ++++++ .history/lang/en_20241208160120.json | 453 ++++++ .history/lang/en_20241208160121.json | 453 ++++++ .history/lang/en_20241208160127.json | 454 ++++++ .history/lang/en_20241208160131.json | 453 ++++++ .history/lang/en_20241208160132.json | 454 ++++++ .history/lang/en_20241208160135.json | 454 ++++++ .history/lang/en_20241208160138.json | 455 ++++++ .history/lang/en_20241208160139.json | 455 ++++++ .history/lang/en_20241208160141.json | 454 ++++++ .history/lang/en_20241208160144.json | 455 ++++++ .history/lang/en_20241208160146.json | 455 ++++++ .history/lang/en_20241208160149.json | 455 ++++++ .history/lang/en_20241208160155.json | 457 ++++++ .history/lang/en_20241208160156.json | 457 ++++++ .history/lang/en_20241208160219.json | 456 ++++++ .history/lang/en_20241208160226.json | 458 ++++++ .history/lang/en_20241208160227.json | 458 ++++++ .history/lang/en_20241208160230.json | 458 ++++++ .history/lang/en_20241208160232.json | 458 ++++++ .history/lang/en_20241208160233.json | 459 ++++++ .history/lang/en_20241208160246.json | 459 ++++++ .history/lang/en_20241208160248.json | 459 ++++++ .history/lang/en_20241208160250.json | 458 ++++++ .history/lang/en_20241208160251.json | 458 ++++++ .history/lang/en_20241208160252.json | 458 ++++++ .history/lang/en_20241208160253.json | 458 ++++++ .history/lang/en_20241208160327.json | 459 ++++++ .history/lang/en_20241208160338.json | 460 ++++++ .history/lang/en_20241208160339.json | 462 ++++++ .history/lang/en_20241208160340.json | 462 ++++++ .history/lang/en_20241208201739.json | 465 ++++++ .history/lang/en_20241208201743.json | 465 ++++++ .history/lang/en_20241208201747.json | 465 ++++++ .history/lang/en_20241208201748.json | 465 ++++++ .history/lang/en_20241208201750.json | 465 ++++++ .history/lang/en_20241208201752.json | 465 ++++++ .history/lang/en_20241208201758.json | 467 ++++++ .history/lang/en_20241208201759.json | 467 ++++++ .history/lang/en_20241208201801.json | 468 ++++++ .history/lang/en_20241208201802.json | 470 ++++++ .history/lang/en_20241208201804.json | 470 ++++++ .history/lang/en_20241208201805.json | 471 ++++++ .history/lang/en_20241208201806.json | 473 ++++++ .history/lang/en_20241208201808.json | 473 ++++++ .history/lang/en_20241208201809.json | 473 ++++++ .history/lang/en_20241208201810.json | 473 ++++++ .history/lang/en_20241208201814.json | 473 ++++++ .history/lang/en_20241208201817.json | 473 ++++++ .history/lang/en_20241208201818.json | 473 ++++++ .history/lang/en_20241208201821.json | 473 ++++++ .history/lang/en_20241208201823.json | 473 ++++++ .history/lang/en_20241208201824.json | 473 ++++++ .history/lang/en_20241208201825.json | 473 ++++++ .history/lang/en_20241208204159.json | 459 ++++++ .history/lang/en_20241208204228.json | 474 ++++++ .history/lang/en_20241208204229.json | 473 ++++++ .history/lang/en_20241208204230.json | 473 ++++++ .history/lang/en_20241208204231.json | 473 ++++++ .history/lang/en_20241209151421.json | 473 ++++++ .history/lang/en_20241209151424.json | 474 ++++++ .history/lang/en_20241209151430.json | 474 ++++++ .history/lang/en_20241209151434.json | 475 ++++++ .history/lang/en_20241209151441.json | 477 ++++++ .history/lang/en_20241209151444.json | 477 ++++++ .history/lang/en_20241209151445.json | 484 ++++++ .history/lang/en_20241209151453.json | 484 ++++++ .history/lang/en_20241209151510.json | 484 ++++++ .history/lang/en_20241209151520.json | 516 +++++++ .history/lang/en_20241209151521.json | 516 +++++++ .history/lang/en_20241209151526.json | 519 +++++++ .history/lang/en_20241209151527.json | 519 +++++++ .history/lang/en_20241209151529.json | 519 +++++++ .history/lang/en_20241209151531.json | 519 +++++++ .history/lang/en_20241209151534.json | 519 +++++++ .history/lang/en_20241209151535.json | 519 +++++++ .history/lang/en_20241209151537.json | 520 +++++++ .history/lang/en_20241209151539.json | 520 +++++++ .history/lang/en_20241209151546.json | 522 +++++++ .history/lang/en_20241209151547.json | 522 +++++++ .history/lang/en_20241209151551.json | 519 +++++++ .history/lang/en_20241209151554.json | 519 +++++++ .history/lang/en_20241209151556.json | 519 +++++++ .history/lang/en_20241209151557.json | 519 +++++++ .history/lang/en_20241209151602.json | 516 +++++++ .history/lang/en_20241209151604.json | 519 +++++++ .history/lang/en_20241209151607.json | 516 +++++++ .history/lang/en_20241209151643.json | 516 +++++++ .history/lang/en_20241209151656.json | 516 +++++++ .history/lang/en_20241209151657.json | 516 +++++++ .history/lang/en_20241209151658.json | 516 +++++++ .history/lang/en_20241209231413.json | 516 +++++++ .history/lang/en_20241209231449.json | 516 +++++++ .history/lang/en_20241210071126.json | 516 +++++++ .history/lang/en_20241210071129.json | 516 +++++++ .history/lang/en_20241210071134.json | 516 +++++++ .history/lang/en_20241210071137.json | 516 +++++++ .history/lang/en_20241210071142.json | 516 +++++++ .history/lang/en_20241210071907.json | 516 +++++++ .history/lang/en_20241210071913.json | 516 +++++++ .history/lang/en_20241210071929.json | 516 +++++++ .history/lang/en_20241210071939.json | 519 +++++++ .history/lang/en_20241210071942.json | 519 +++++++ .history/lang/en_20241210071944.json | 519 +++++++ .history/lang/en_20241210071946.json | 519 +++++++ .history/lang/en_20241210071949.json | 519 +++++++ .history/lang/en_20241210072002.json | 519 +++++++ .history/lang/en_20241210075355.json | 519 +++++++ .history/lang/en_20241210075359.json | 520 +++++++ .history/lang/en_20241210075404.json | 520 +++++++ .history/lang/en_20241210075406.json | 522 +++++++ .history/lang/en_20241210075454.json | 522 +++++++ .history/lang/en_20241210075457.json | 524 +++++++ .history/lang/en_20241210075501.json | 525 +++++++ .history/lang/en_20241210075503.json | 525 +++++++ .history/lang/en_20241210075507.json | 527 +++++++ .history/lang/en_20241210075512.json | 528 +++++++ .history/lang/en_20241210075515.json | 528 +++++++ .history/lang/en_20241210075516.json | 530 +++++++ .history/lang/en_20241210075524.json | 533 +++++++ .history/lang/en_20241210075531.json | 537 +++++++ .history/lang/en_20241210075536.json | 539 +++++++ .history/lang/en_20241210075537.json | 539 +++++++ .history/lang/en_20241210075538.json | 539 +++++++ .history/lang/en_20241210075545.json | 542 +++++++ .history/lang/en_20241210075548.json | 542 +++++++ .history/lang/en_20241210075549.json | 542 +++++++ .history/lang/en_20241210075551.json | 542 +++++++ .history/lang/en_20241210075553.json | 545 +++++++ .history/lang/en_20241210075559.json | 545 +++++++ .history/lang/en_20241210075601.json | 547 +++++++ .history/lang/en_20241210075603.json | 547 +++++++ .history/lang/en_20241210075604.json | 547 +++++++ .history/lang/en_20241210075624.json | 550 +++++++ .history/lang/en_20241210075625.json | 550 +++++++ .history/lang/en_20241210172550.json | 553 +++++++ .history/lang/en_20241210172555.json | 554 +++++++ .history/lang/en_20241210172559.json | 554 +++++++ .history/lang/en_20241210172601.json | 554 +++++++ .history/lang/en_20241210172604.json | 556 +++++++ .history/lang/en_20241210172615.json | 559 +++++++ .history/lang/en_20241210172745.json | 560 +++++++ .history/lang/en_20241210172747.json | 560 +++++++ .history/lang/en_20241210172748.json | 562 +++++++ .history/lang/en_20241210173415.json | 562 +++++++ .history/lang/en_20241210173416.json | 562 +++++++ .history/lang/en_20241210173417.json | 562 +++++++ .history/lang/en_20241210173955.json | 562 +++++++ .history/lang/en_20241210173957.json | 562 +++++++ .history/lang/en_20241210205431.json | 563 +++++++ .history/lang/en_20241210205433.json | 565 +++++++ .history/lang/en_20241210205434.json | 565 +++++++ .history/lang/en_20241210205436.json | 570 ++++++++ .history/lang/en_20241210205437.json | 570 ++++++++ .history/lang/en_20241210211753.json | 571 ++++++++ .history/lang/en_20241210211755.json | 571 ++++++++ .history/lang/en_20241210211759.json | 571 ++++++++ .history/lang/en_20241210225328.json | 572 ++++++++ .history/lang/en_20241210225330.json | 572 ++++++++ .history/lang/en_20241210225333.json | 572 ++++++++ .history/lang/en_20241210225340.json | 573 ++++++++ .history/lang/en_20241210225344.json | 573 ++++++++ .history/lang/en_20241210225347.json | 575 ++++++++ .history/lang/en_20241210225350.json | 575 ++++++++ .history/lang/en_20241210225353.json | 575 ++++++++ .history/lang/en_20241210225355.json | 575 ++++++++ .history/lang/en_20241210225356.json | 575 ++++++++ .history/lang/en_20241210225402.json | 575 ++++++++ .history/lang/en_20241210225404.json | 575 ++++++++ .history/lang/en_20241210225406.json | 575 ++++++++ .history/lang/en_20241210225407.json | 576 ++++++++ .history/lang/en_20241210225408.json | 576 ++++++++ .history/lang/en_20241210225410.json | 576 ++++++++ .history/lang/en_20241210225415.json | 576 ++++++++ .history/lang/en_20241210225418.json | 577 ++++++++ .history/lang/en_20241210225420.json | 577 ++++++++ .history/lang/en_20241210225421.json | 577 ++++++++ .history/lang/en_20241210225438.json | 577 ++++++++ .history/lang/en_20241210225439.json | 577 ++++++++ .history/lang/en_20241210225440.json | 577 ++++++++ .history/lang/en_20241210225441.json | 577 ++++++++ .history/lang/en_20241210225557.json | 577 ++++++++ .history/lang/en_20241210225558.json | 577 ++++++++ .history/lang/en_20241210225600.json | 577 ++++++++ .history/lang/en_20241210230016.json | 578 ++++++++ .history/lang/en_20241210230017.json | 578 ++++++++ .history/lang/en_20241210230018.json | 578 ++++++++ .history/lang/en_20241210230240.json | 579 ++++++++ .history/lang/en_20241210230241.json | 581 ++++++++ .history/lang/en_20241210230244.json | 581 ++++++++ .history/lang/en_20241210230245.json | 581 ++++++++ .history/lang/en_20241210230249.json | 583 ++++++++ .history/lang/en_20241210230253.json | 584 ++++++++ .history/lang/en_20241210230254.json | 586 ++++++++ .history/lang/en_20241210230255.json | 586 ++++++++ .history/lang/en_20241210230316.json | 585 ++++++++ .history/lang/en_20241210230318.json | 584 ++++++++ .history/lang/en_20241210230320.json | 584 ++++++++ .history/lang/en_20241210230321.json | 584 ++++++++ .history/lang/en_20241210230324.json | 583 ++++++++ .history/lang/en_20241210230325.json | 583 ++++++++ .history/lang/en_20241210230327.json | 582 ++++++++ .history/lang/en_20241210230331.json | 582 ++++++++ .history/lang/en_20241210230347.json | 584 ++++++++ .history/lang/en_20241210230348.json | 584 ++++++++ .history/lang/en_20241210230349.json | 584 ++++++++ .history/lang/en_20241210230352.json | 586 ++++++++ .history/lang/en_20241210230353.json | 586 ++++++++ .history/lang/en_20241210230508.json | 587 ++++++++ .history/lang/en_20241210230513.json | 588 ++++++++ .history/lang/en_20241210230514.json | 588 ++++++++ .history/lang/en_20241210230729.json | 589 ++++++++ .history/lang/en_20241210230731.json | 589 ++++++++ .history/lang/en_20241210230736.json | 590 ++++++++ .history/lang/en_20241210230737.json | 590 ++++++++ .history/lang/en_20241210230803.json | 590 ++++++++ .history/lang/en_20241210230840.json | 591 ++++++++ .history/lang/en_20241210230841.json | 592 ++++++++ .history/lang/en_20241210230842.json | 592 ++++++++ .history/lang/en_20241210230925.json | 592 ++++++++ .history/lang/en_20241210231340.json | 593 ++++++++ .history/lang/en_20241210231342.json | 593 ++++++++ .history/lang/en_20241210231345.json | 595 ++++++++ .history/lang/en_20241210231349.json | 595 ++++++++ .history/lang/en_20241210231350.json | 596 ++++++++ .history/lang/en_20241210231353.json | 597 ++++++++ .history/lang/en_20241210231354.json | 598 ++++++++ .history/lang/en_20241210231357.json | 598 ++++++++ .history/lang/en_20241210231358.json | 598 ++++++++ .history/lang/en_20241210231359.json | 598 ++++++++ .history/lang/en_20241210231452.json | 599 ++++++++ .history/lang/en_20241210231455.json | 599 ++++++++ .history/lang/en_20241210231456.json | 599 ++++++++ .history/lang/en_20241210231457.json | 599 ++++++++ .history/lang/en_20241217070308.json | 600 ++++++++ .history/lang/en_20241217070311.json | 602 ++++++++ .history/lang/en_20241217070313.json | 602 ++++++++ .history/lang/en_20241217070326.json | 602 ++++++++ .history/lang/en_20241217070729.json | 603 ++++++++ .history/lang/en_20241217070732.json | 603 ++++++++ .history/lang/en_20241217070733.json | 603 ++++++++ .history/lang/en_20241217070734.json | 605 ++++++++ .history/lethal-fantasy_20241207081924.mjs | 204 +++ .history/lethal-fantasy_20241209151149.mjs | 205 +++ .history/lethal-fantasy_20241209151153.mjs | 205 +++ .history/lethal-fantasy_20241209151155.mjs | 205 +++ .history/lethal-fantasy_20241209151158.mjs | 205 +++ .history/lethal-fantasy_20241209151200.mjs | 205 +++ .history/lethal-fantasy_20241209151204.mjs | 206 +++ .history/lethal-fantasy_20241209151205.mjs | 206 +++ .history/lethal-fantasy_20241209151206.mjs | 206 +++ .history/lethal-fantasy_20241209151207.mjs | 206 +++ .history/lethal-fantasy_20241209151209.mjs | 206 +++ .history/lethal-fantasy_20241209231439.mjs | 206 +++ .history/lethal-fantasy_20241210071333.mjs | 205 +++ .history/lethal-fantasy_20241210071338.mjs | 204 +++ .../applications/_module_20241201145411.mjs | 12 + .../applications/_module_20241209151255.mjs | 13 + .../applications/_module_20241209151257.mjs | 14 + .../applications/_module_20241209151258.mjs | 14 + .../applications/_module_20241210071442.mjs | 13 + .../sheets/armor-sheet_20241121235703.mjs | 27 + .../sheets/armor-sheet_20241210071050.mjs | 22 + .../sheets/armor-sheet_20241210072306.mjs | 30 + .../sheets/armor-sheet_20241210072307.mjs | 30 + .../sheets/character-sheet_20241207085714.mjs | 194 +++ .../sheets/character-sheet_20241208153603.mjs | 194 +++ .../sheets/character-sheet_20241208153604.mjs | 194 +++ .../sheets/character-sheet_20241208153607.mjs | 194 +++ .../sheets/character-sheet_20241208153608.mjs | 194 +++ .../sheets/character-sheet_20241208153649.mjs | 194 +++ .../sheets/character-sheet_20241208153652.mjs | 194 +++ .../sheets/character-sheet_20241208153655.mjs | 194 +++ .../sheets/character-sheet_20241208153656.mjs | 194 +++ .../sheets/character-sheet_20241208153657.mjs | 194 +++ .../sheets/character-sheet_20241208154229.mjs | 194 +++ .../sheets/character-sheet_20241208154230.mjs | 194 +++ .../sheets/character-sheet_20241208154238.mjs | 195 +++ .../sheets/character-sheet_20241208154242.mjs | 195 +++ .../sheets/character-sheet_20241208154244.mjs | 195 +++ .../sheets/character-sheet_20241208154246.mjs | 195 +++ .../sheets/character-sheet_20241208154249.mjs | 195 +++ .../sheets/character-sheet_20241208154525.mjs | 196 +++ .../sheets/character-sheet_20241208154526.mjs | 196 +++ .../sheets/character-sheet_20241208154527.mjs | 196 +++ .../sheets/character-sheet_20241208154528.mjs | 196 +++ .../sheets/character-sheet_20241208154530.mjs | 196 +++ .../sheets/equipment-sheet_20241130083352.mjs | 27 + .../sheets/equipment-sheet_20241210072300.mjs | 28 + .../sheets/miracle-sheet_20241209151222.mjs | 0 .../sheets/miracle-sheet_20241209151225.mjs | 21 + .../sheets/miracle-sheet_20241209151230.mjs | 21 + .../sheets/miracle-sheet_20241209151231.mjs | 21 + .../sheets/miracle-sheet_20241209151234.mjs | 21 + .../sheets/miracle-sheet_20241209151237.mjs | 22 + .../sheets/miracle-sheet_20241209151239.mjs | 21 + .../sheets/miracle-sheet_20241209151241.mjs | 21 + .../sheets/miracle-sheet_20241209151244.mjs | 21 + .../sheets/miracle-sheet_20241209151245.mjs | 21 + .../sheets/miracle-sheet_20241209231624.mjs | 21 + .../sheets/miracle-sheet_20241209231625.mjs | 21 + .../sheets/miracle-sheet_20241209231626.mjs | 21 + .../sheets/miracle-sheet_20241210072248.mjs | 29 + .../sheets/miracle-sheet_20241210072251.mjs | 29 + .../sheets/shield-sheet_20241203125805.mjs | 27 + .../sheets/shield-sheet_20241210072243.mjs | 28 + .../sheets/spell-sheet_20241121235722.mjs | 21 + .../sheets/spell-sheet_20241210072209.mjs | 29 + .../sheets/spell-sheet_20241210072211.mjs | 29 + .../sheets/weapon-sheet_20241203131225.mjs | 21 + .../sheets/weapon-sheet_20241210071054.mjs | 21 + .../sheets/weapon-sheet_20241210072223.mjs | 28 + .../sheets/weapon-sheet_20241210072225.mjs | 28 + .../sheets/weapon-sheet_20241210072235.mjs | 29 + .../config/character_20241207091147.mjs | 61 + .../config/character_20241210075220.mjs | 74 + .../config/character_20241210075222.mjs | 74 + .../config/character_20241210075224.mjs | 75 + .../config/character_20241210075228.mjs | 75 + .../config/character_20241210075229.mjs | 75 + .../config/character_20241210075231.mjs | 75 + .../config/character_20241210075236.mjs | 76 + .../config/character_20241210075238.mjs | 76 + .../config/character_20241210075243.mjs | 64 + .../config/character_20241210075254.mjs | 68 + .../config/character_20241210075256.mjs | 68 + .../config/character_20241210075300.mjs | 68 + .../config/character_20241210075305.mjs | 68 + .../config/character_20241210075306.mjs | 68 + .../config/character_20241210075311.mjs | 72 + .../config/character_20241210075313.mjs | 72 + .../config/character_20241210075316.mjs | 72 + .../config/character_20241210075321.mjs | 72 + .../config/character_20241210075323.mjs | 72 + .../config/character_20241210075331.mjs | 76 + .../config/character_20241210075333.mjs | 76 + .../config/character_20241210075336.mjs | 76 + .../config/character_20241210075339.mjs | 76 + .../config/character_20241210075341.mjs | 76 + .../config/character_20241210075630.mjs | 76 + .../config/character_20241210173254.mjs | 76 + .../characteristic-tables_20241208161354.mjs | 0 .../characteristic-tables_20241208161403.mjs | 1 + .../characteristic-tables_20241208161404.mjs | 1 + .../characteristic-tables_20241208161410.mjs | 3 + .../characteristic-tables_20241208161416.mjs | 3 + .../characteristic-tables_20241208161418.mjs | 5 + .../characteristic-tables_20241208161422.mjs | 5 + .../characteristic-tables_20241208161426.mjs | 5 + .../characteristic-tables_20241208161427.mjs | 5 + .../characteristic-tables_20241208161447.mjs | 281 ++++ .../characteristic-tables_20241208161448.mjs | 281 ++++ .../characteristic-tables_20241208161450.mjs | 281 ++++ .../characteristic-tables_20241208161451.mjs | 281 ++++ .../characteristic-tables_20241208161452.mjs | 281 ++++ .../characteristic-tables_20241208161501.mjs | 281 ++++ .../characteristic-tables_20241208161535.mjs | 281 ++++ .../characteristic-tables_20241208161544.mjs | 281 ++++ .../characteristic-tables_20241208161557.mjs | 281 ++++ .../characteristic-tables_20241208161607.mjs | 281 ++++ .../characteristic-tables_20241208161620.mjs | 281 ++++ .../characteristic-tables_20241208161629.mjs | 281 ++++ .../characteristic-tables_20241208161643.mjs | 281 ++++ .../characteristic-tables_20241208161653.mjs | 281 ++++ .../characteristic-tables_20241208161701.mjs | 281 ++++ .../characteristic-tables_20241208161708.mjs | 281 ++++ .../characteristic-tables_20241208161721.mjs | 281 ++++ .../characteristic-tables_20241208161722.mjs | 281 ++++ .../characteristic-tables_20241208161731.mjs | 282 ++++ .../characteristic-tables_20241208161811.mjs | 282 ++++ .../characteristic-tables_20241208161812.mjs | 508 +++++++ .../characteristic-tables_20241208161821.mjs | 508 +++++++ .../characteristic-tables_20241208161822.mjs | 508 +++++++ .../characteristic-tables_20241208161827.mjs | 508 +++++++ .../characteristic-tables_20241208161835.mjs | 508 +++++++ .../characteristic-tables_20241208161841.mjs | 508 +++++++ .../characteristic-tables_20241208161852.mjs | 508 +++++++ .../characteristic-tables_20241208161854.mjs | 508 +++++++ .../characteristic-tables_20241208161902.mjs | 508 +++++++ .../characteristic-tables_20241208161913.mjs | 508 +++++++ .../characteristic-tables_20241208161929.mjs | 508 +++++++ .../characteristic-tables_20241208161955.mjs | 508 +++++++ .../characteristic-tables_20241208161958.mjs | 509 +++++++ .../characteristic-tables_20241208162000.mjs | 509 +++++++ .../characteristic-tables_20241208162001.mjs | 760 ++++++++++ .../characteristic-tables_20241208162006.mjs | 760 ++++++++++ .../characteristic-tables_20241208162010.mjs | 760 ++++++++++ .../characteristic-tables_20241208162020.mjs | 760 ++++++++++ .../characteristic-tables_20241208162027.mjs | 760 ++++++++++ .../characteristic-tables_20241208162030.mjs | 760 ++++++++++ .../characteristic-tables_20241208162042.mjs | 760 ++++++++++ .../characteristic-tables_20241208162109.mjs | 760 ++++++++++ .../characteristic-tables_20241208162144.mjs | 760 ++++++++++ .../characteristic-tables_20241208162149.mjs | 760 ++++++++++ .../characteristic-tables_20241208162202.mjs | 760 ++++++++++ .../characteristic-tables_20241208162217.mjs | 760 ++++++++++ .../characteristic-tables_20241208162244.mjs | 760 ++++++++++ .../characteristic-tables_20241208162245.mjs | 760 ++++++++++ .../characteristic-tables_20241208162424.mjs | 761 ++++++++++ .../characteristic-tables_20241208162426.mjs | 761 ++++++++++ .../characteristic-tables_20241208162428.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162433.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162445.mjs | 938 ++++++++++++ .../characteristic-tables_20241208162446.mjs | 938 ++++++++++++ .../characteristic-tables_20241208162447.mjs | 938 ++++++++++++ .../characteristic-tables_20241208162454.mjs | 938 ++++++++++++ .../characteristic-tables_20241208162455.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162504.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162508.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162509.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162513.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162523.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162535.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162536.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162551.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162552.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162558.mjs | 937 ++++++++++++ .../characteristic-tables_20241208162639.mjs | 938 ++++++++++++ .../characteristic-tables_20241208162642.mjs | 1039 +++++++++++++ .../characteristic-tables_20241208162657.mjs | 1039 +++++++++++++ .../characteristic-tables_20241208162704.mjs | 1039 +++++++++++++ .../characteristic-tables_20241208162706.mjs | 1039 +++++++++++++ .../characteristic-tables_20241208162726.mjs | 1040 +++++++++++++ .../characteristic-tables_20241208162728.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208162739.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208162746.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208162753.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208162805.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208162810.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208162820.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208162821.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208162835.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208163012.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208163217.mjs | 1290 ++++++++++++++++ .../characteristic-tables_20241208163335.mjs | 1290 ++++++++++++++++ .../characteristic-tables_20241208163337.mjs | 1290 ++++++++++++++++ .../characteristic-tables_20241208163646.mjs | 1290 ++++++++++++++++ .../characteristic-tables_20241208163647.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208163651.mjs | 1296 +++++++++++++++++ .../characteristic-tables_20241208163706.mjs | 1296 +++++++++++++++++ .../characteristic-tables_20241208163712.mjs | 1296 +++++++++++++++++ .../characteristic-tables_20241208163717.mjs | 1295 ++++++++++++++++ .../characteristic-tables_20241208163719.mjs | 1294 ++++++++++++++++ .../characteristic-tables_20241208163722.mjs | 1294 ++++++++++++++++ .../characteristic-tables_20241208163728.mjs | 1291 ++++++++++++++++ .../characteristic-tables_20241208163730.mjs | 1292 ++++++++++++++++ .../characteristic-tables_20241208163733.mjs | 1292 ++++++++++++++++ .../characteristic-tables_20241208163735.mjs | 1292 ++++++++++++++++ .../characteristic-tables_20241208163737.mjs | 1292 ++++++++++++++++ .../characteristic-tables_20241208163738.mjs | 1292 ++++++++++++++++ .../characteristic-tables_20241208163740.mjs | 1292 ++++++++++++++++ .../characteristic-tables_20241208163742.mjs | 1292 ++++++++++++++++ .../characteristic-tables_20241208163745.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204026.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204027.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204038.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204039.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204040.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204043.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204044.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204045.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204046.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204047.mjs | 1293 ++++++++++++++++ .../characteristic-tables_20241208204048.mjs | 1293 ++++++++++++++++ .../module/config/system_20241207230457.mjs | 90 ++ .../module/config/system_20241208155651.mjs | 91 ++ .../module/config/system_20241208155652.mjs | 91 ++ .../module/config/system_20241208161331.mjs | 89 ++ .../module/config/system_20241208161335.mjs | 81 ++ .../module/config/system_20241208161336.mjs | 81 ++ .../module/config/system_20241208161341.mjs | 81 ++ .../module/config/system_20241208163232.mjs | 81 ++ .../module/config/system_20241208163236.mjs | 81 ++ .../module/config/system_20241208163237.mjs | 81 ++ .../module/config/system_20241208163239.mjs | 81 ++ .../module/config/system_20241208163243.mjs | 81 ++ .../module/config/system_20241208163245.mjs | 82 ++ .../module/config/system_20241208163247.mjs | 82 ++ .../module/config/system_20241208163248.mjs | 82 ++ .../module/config/system_20241208163253.mjs | 82 ++ .../module/config/system_20241208163259.mjs | 82 ++ .../module/config/system_20241208163300.mjs | 82 ++ .../module/config/system_20241208163301.mjs | 82 ++ .../module/config/system_20241208163304.mjs | 82 ++ .../module/config/system_20241208163306.mjs | 82 ++ .../module/config/system_20241208163314.mjs | 82 ++ .../module/config/system_20241208163315.mjs | 82 ++ .../module/config/system_20241208163322.mjs | 83 ++ .../module/config/system_20241208163323.mjs | 83 ++ .../module/config/system_20241208163324.mjs | 83 ++ .../module/config/system_20241208163327.mjs | 83 ++ .../module/config/system_20241208163328.mjs | 83 ++ .../module/config/system_20241208163330.mjs | 83 ++ .../module/config/system_20241208163331.mjs | 83 ++ .../module/config/system_20241208163752.mjs | 84 ++ .../module/config/system_20241208163755.mjs | 84 ++ .../module/config/system_20241208163757.mjs | 84 ++ .../module/config/system_20241208163758.mjs | 84 ++ .../module/config/system_20241208163804.mjs | 84 ++ .../module/config/system_20241208163805.mjs | 84 ++ .../module/config/system_20241208163806.mjs | 84 ++ .../module/config/system_20241208163807.mjs | 84 ++ .../module/config/system_20241210075418.mjs | 85 ++ .../module/config/system_20241210075422.mjs | 85 ++ .../module/config/system_20241217070425.mjs | 86 ++ .../module/config/system_20241217070432.mjs | 86 ++ .../module/config/system_20241217070434.mjs | 86 ++ .../module/config/weapon_20241207230317.mjs | 6 + .../module/config/weapon_20241208155340.mjs | 9 + .../module/config/weapon_20241208155343.mjs | 9 + .../module/config/weapon_20241208155345.mjs | 9 + .../module/config/weapon_20241208155348.mjs | 9 + .../module/config/weapon_20241208155354.mjs | 9 + .../module/config/weapon_20241208155356.mjs | 9 + .../module/config/weapon_20241208155357.mjs | 9 + .../module/config/weapon_20241208155358.mjs | 10 + .../module/config/weapon_20241208155400.mjs | 10 + .../module/config/weapon_20241208155414.mjs | 11 + .../module/config/weapon_20241208155416.mjs | 11 + .../module/config/weapon_20241208155418.mjs | 12 + .../module/config/weapon_20241208155421.mjs | 13 + .../module/config/weapon_20241208155431.mjs | 13 + .../module/config/weapon_20241208155433.mjs | 13 + .../module/config/weapon_20241208155438.mjs | 13 + .../module/config/weapon_20241208155440.mjs | 13 + .../module/config/weapon_20241208155441.mjs | 13 + .../module/config/weapon_20241208155444.mjs | 13 + .../module/config/weapon_20241208155447.mjs | 13 + .../module/config/weapon_20241208155449.mjs | 13 + .../module/config/weapon_20241208155453.mjs | 13 + .../module/config/weapon_20241208155454.mjs | 14 + .../module/config/weapon_20241208155502.mjs | 14 + .../module/config/weapon_20241208155508.mjs | 15 + .../module/config/weapon_20241208155510.mjs | 15 + .../module/config/weapon_20241208155518.mjs | 15 + .../module/config/weapon_20241208155520.mjs | 16 + .../module/config/weapon_20241208155526.mjs | 16 + .../module/config/weapon_20241208155528.mjs | 16 + .../module/config/weapon_20241208155534.mjs | 18 + .../module/config/weapon_20241208155536.mjs | 18 + .../module/config/weapon_20241208155540.mjs | 18 + .../module/config/weapon_20241208155549.mjs | 19 + .../module/config/weapon_20241208155551.mjs | 20 + .../module/config/weapon_20241208155557.mjs | 20 + .../module/config/weapon_20241208155559.mjs | 20 + .../module/config/weapon_20241208155608.mjs | 21 + .../module/config/weapon_20241208155609.mjs | 21 + .../module/config/weapon_20241208155610.mjs | 21 + .../module/config/weapon_20241208155611.mjs | 20 + .../module/config/weapon_20241208155612.mjs | 20 + .../module/config/weapon_20241208155640.mjs | 20 + .../module/config/weapon_20241208155641.mjs | 20 + .../module/config/weapon_20241208155642.mjs | 20 + .../module/config/weapon_20241217070347.mjs | 23 + .../module/config/weapon_20241217070351.mjs | 29 + .../module/config/weapon_20241217070352.mjs | 29 + .../module/config/weapon_20241217070357.mjs | 29 + .../module/config/weapon_20241217070400.mjs | 29 + .../module/config/weapon_20241217070403.mjs | 29 + .../module/config/weapon_20241217070406.mjs | 29 + .../module/config/weapon_20241217070409.mjs | 29 + .../module/config/weapon_20241217070412.mjs | 29 + .../module/documents/item_20241206134814.mjs | 19 + .../module/documents/item_20241209231729.mjs | 20 + .../module/documents/item_20241209231731.mjs | 20 + .../module/documents/item_20241209231733.mjs | 20 + .../module/documents/item_20241209231735.mjs | 20 + .../module/documents/item_20241209231739.mjs | 20 + .../module/documents/item_20241209231740.mjs | 20 + .../module/documents/item_20241209231806.mjs | 20 + .../module/documents/item_20241217065944.mjs | 20 + .../module/documents/item_20241217065947.mjs | 20 + .../module/documents/item_20241217065948.mjs | 20 + .../module/models/_module_20241201145936.mjs | 11 + .../module/models/_module_20241209151101.mjs | 12 + .../module/models/_module_20241209151102.mjs | 12 + .../module/models/_module_20241210070822.mjs | 12 + .../module/models/_module_20241210070823.mjs | 12 + .../module/models/_module_20241210070825.mjs | 12 + .../module/models/_module_20241210071429.mjs | 11 + .../module/models/armor_20241130182142.mjs | 29 + .../module/models/armor_20241210070624.mjs | 26 + .../module/models/armor_20241210070625.mjs | 26 + .../module/models/armor_20241210070627.mjs | 25 + .../module/models/armor_20241210070631.mjs | 29 + .../module/models/armor_20241210070634.mjs | 26 + .../module/models/armor_20241210070636.mjs | 26 + .../module/models/armor_20241210070637.mjs | 26 + .../module/models/armor_20241210070918.mjs | 26 + .../module/models/armor_20241210070920.mjs | 26 + .../module/models/armor_20241210070923.mjs | 26 + .../module/models/armor_20241210071003.mjs | 26 + .../module/models/armor_20241210071028.mjs | 26 + .../module/models/armor_20241210071210.mjs | 26 + .../module/models/armor_20241210071213.mjs | 26 + .../module/models/armor_20241210071217.mjs | 26 + .../module/models/armor_20241210071218.mjs | 26 + .../module/models/armor_20241210071602.mjs | 26 + .../module/models/armor_20241210071604.mjs | 26 + .../module/models/armor_20241210071830.mjs | 26 + .../module/models/armor_20241210172351.mjs | 26 + .../module/models/armor_20241210172354.mjs | 26 + .../module/models/armor_20241210172355.mjs | 26 + .../module/models/armor_20241210172356.mjs | 26 + .../module/models/armor_20241210172411.mjs | 26 + .../module/models/armor_20241210172415.mjs | 26 + .../module/models/armor_20241210172421.mjs | 26 + .../module/models/armor_20241210172422.mjs | 27 + .../module/models/armor_20241210172439.mjs | 28 + .../module/models/armor_20241210172441.mjs | 28 + .../module/models/armor_20241210172442.mjs | 28 + .../module/models/armor_20241210172443.mjs | 28 + .../module/models/armor_20241210172447.mjs | 28 + .../module/models/armor_20241210172449.mjs | 28 + .../module/models/armor_20241210173329.mjs | 28 + .../module/models/armor_20241210173332.mjs | 28 + .../module/models/armor_20241210173333.mjs | 28 + .../models/character_20241130072212.mjs | 142 ++ .../models/character_20241208163852.mjs | 146 ++ .../models/character_20241208163903.mjs | 146 ++ .../models/character_20241208163907.mjs | 146 ++ .../models/character_20241208163950.mjs | 146 ++ .../models/character_20241208163954.mjs | 146 ++ .../models/character_20241208164009.mjs | 147 ++ .../models/character_20241208164014.mjs | 147 ++ .../models/character_20241208164015.mjs | 147 ++ .../models/character_20241208164017.mjs | 147 ++ .../models/character_20241208164018.mjs | 147 ++ .../models/character_20241208164021.mjs | 147 ++ .../models/character_20241208164036.mjs | 148 ++ .../models/character_20241208164043.mjs | 149 ++ .../models/character_20241208164048.mjs | 149 ++ .../models/character_20241208164054.mjs | 149 ++ .../models/character_20241208164055.mjs | 149 ++ .../models/character_20241208164101.mjs | 150 ++ .../models/character_20241208164153.mjs | 150 ++ .../models/character_20241208164154.mjs | 150 ++ .../models/character_20241208164223.mjs | 150 ++ .../models/character_20241208164226.mjs | 150 ++ .../models/character_20241208164228.mjs | 152 ++ .../models/character_20241208164233.mjs | 152 ++ .../models/character_20241208164234.mjs | 152 ++ .../models/character_20241208164237.mjs | 152 ++ .../models/character_20241208164238.mjs | 152 ++ .../models/character_20241208164239.mjs | 152 ++ .../models/character_20241208164240.mjs | 152 ++ .../models/character_20241208164241.mjs | 152 ++ .../models/character_20241208164246.mjs | 153 ++ .../models/character_20241208164252.mjs | 153 ++ .../models/character_20241208164253.mjs | 153 ++ .../models/character_20241208164256.mjs | 153 ++ .../models/character_20241208164257.mjs | 153 ++ .../models/character_20241208164300.mjs | 154 ++ .../models/character_20241210075636.mjs | 154 ++ .../models/character_20241210075643.mjs | 162 +++ .../models/character_20241210075647.mjs | 163 +++ .../models/character_20241210075650.mjs | 163 +++ .../models/character_20241210075651.mjs | 163 +++ .../models/character_20241210075659.mjs | 169 +++ .../models/character_20241210075704.mjs | 169 +++ .../models/character_20241210075708.mjs | 169 +++ .../models/character_20241210075711.mjs | 169 +++ .../models/character_20241210075712.mjs | 169 +++ .../models/character_20241210075716.mjs | 169 +++ .../models/character_20241210075717.mjs | 169 +++ .../models/character_20241210075811.mjs | 173 +++ .../models/character_20241210075815.mjs | 173 +++ .../models/character_20241210075816.mjs | 173 +++ .../models/character_20241210075819.mjs | 173 +++ .../models/character_20241210075821.mjs | 173 +++ .../models/character_20241210075822.mjs | 173 +++ .../models/character_20241210075823.mjs | 173 +++ .../models/character_20241210075824.mjs | 174 +++ .../models/character_20241210075825.mjs | 173 +++ .../models/character_20241210075832.mjs | 173 +++ .../models/character_20241210075837.mjs | 173 +++ .../models/character_20241210075917.mjs | 177 +++ .../models/character_20241210075919.mjs | 177 +++ .../models/character_20241210075920.mjs | 177 +++ .../models/character_20241210080003.mjs | 178 +++ .../models/character_20241210080005.mjs | 186 +++ .../models/character_20241210080009.mjs | 186 +++ .../models/character_20241210080010.mjs | 186 +++ .../models/character_20241210080011.mjs | 186 +++ .../models/character_20241210080012.mjs | 186 +++ .../models/character_20241210080017.mjs | 186 +++ .../models/character_20241210080018.mjs | 186 +++ .../models/character_20241210080036.mjs | 186 +++ .../models/character_20241210080039.mjs | 186 +++ .../models/equipment_20241207222905.mjs | 25 + .../models/equipment_20241210071226.mjs | 25 + .../models/equipment_20241210071610.mjs | 25 + .../models/equipment_20241210071839.mjs | 25 + .../module/models/miracle_20241209150718.mjs | 0 .../module/models/miracle_20241209150719.mjs | 39 + .../module/models/miracle_20241209150908.mjs | 39 + .../module/models/miracle_20241209150921.mjs | 39 + .../module/models/miracle_20241209150924.mjs | 39 + .../module/models/miracle_20241209150927.mjs | 39 + .../module/models/miracle_20241209150944.mjs | 40 + .../module/models/miracle_20241209150946.mjs | 40 + .../module/models/miracle_20241209150948.mjs | 40 + .../module/models/miracle_20241209150951.mjs | 41 + .../module/models/miracle_20241209150956.mjs | 41 + .../module/models/miracle_20241209150957.mjs | 41 + .../module/models/miracle_20241209151003.mjs | 41 + .../module/models/miracle_20241209151005.mjs | 41 + .../module/models/miracle_20241209151010.mjs | 41 + .../module/models/miracle_20241209151013.mjs | 41 + .../module/models/miracle_20241209151020.mjs | 41 + .../module/models/miracle_20241209151035.mjs | 41 + .../module/models/miracle_20241209151037.mjs | 40 + .../module/models/miracle_20241209151038.mjs | 40 + .../module/models/miracle_20241209151039.mjs | 38 + .../module/models/miracle_20241209151040.mjs | 38 + .../module/models/miracle_20241209151053.mjs | 38 + .../module/models/miracle_20241209151055.mjs | 38 + .../module/models/shield_20241130182151.mjs | 41 + .../module/models/shield_20241210071245.mjs | 41 + .../module/models/shield_20241210071615.mjs | 41 + .../module/models/shield_20241210071844.mjs | 41 + .../module/models/shield_20241210172434.mjs | 42 + .../module/models/skill_20241207090310.mjs | 67 + .../module/models/skill_20241208155713.mjs | 68 + .../module/models/skill_20241208155715.mjs | 68 + .../module/models/skill_20241208155716.mjs | 68 + .../module/models/skill_20241208155717.mjs | 69 + .../module/models/skill_20241208155726.mjs | 69 + .../module/models/skill_20241208155727.mjs | 69 + .../module/models/skill_20241208155728.mjs | 69 + .../module/models/skill_20241208171006.mjs | 69 + .../module/models/skill_20241208171010.mjs | 69 + .../module/models/skill_20241208171013.mjs | 69 + .../module/models/skill_20241208171015.mjs | 69 + .../module/models/skill_20241208171017.mjs | 69 + .../module/models/skill_20241208171022.mjs | 69 + .../module/models/skill_20241208171023.mjs | 69 + .../module/models/skill_20241208171031.mjs | 70 + .../module/models/skill_20241208171033.mjs | 69 + .../module/models/skill_20241208171035.mjs | 68 + .../module/models/skill_20241208171038.mjs | 69 + .../module/models/skill_20241208171051.mjs | 73 + .../module/models/skill_20241208171055.mjs | 73 + .../module/models/skill_20241208171059.mjs | 73 + .../module/models/skill_20241208171102.mjs | 73 + .../module/models/skill_20241208171105.mjs | 73 + .../module/models/skill_20241208171106.mjs | 73 + .../module/models/skill_20241208171107.mjs | 74 + .../module/models/skill_20241208171108.mjs | 74 + .../module/models/skill_20241208171110.mjs | 74 + .../module/models/skill_20241208171115.mjs | 74 + .../module/models/skill_20241208171116.mjs | 74 + .../module/models/skill_20241208171117.mjs | 74 + .../module/models/skill_20241208171118.mjs | 74 + .../module/models/skill_20241208171121.mjs | 74 + .../module/models/skill_20241208171122.mjs | 74 + .../module/models/skill_20241208201835.mjs | 75 + .../module/models/skill_20241208201841.mjs | 75 + .../module/models/skill_20241208201844.mjs | 75 + .../module/models/skill_20241208201845.mjs | 75 + .../module/models/skill_20241208201847.mjs | 75 + .../module/models/skill_20241208201848.mjs | 75 + .../module/models/skill_20241208201853.mjs | 76 + .../module/models/skill_20241208201856.mjs | 76 + .../module/models/skill_20241208201859.mjs | 76 + .../module/models/skill_20241208201912.mjs | 76 + .../module/models/skill_20241208201914.mjs | 76 + .../module/models/skill_20241208201916.mjs | 76 + .../module/models/skill_20241208201917.mjs | 76 + .../module/models/skill_20241208201919.mjs | 77 + .../module/models/skill_20241208201929.mjs | 77 + .../module/models/skill_20241208201933.mjs | 77 + .../module/models/skill_20241208201950.mjs | 77 + .../module/models/skill_20241208201953.mjs | 77 + .../module/models/skill_20241208201959.mjs | 77 + .../module/models/skill_20241208202001.mjs | 77 + .../module/models/skill_20241208202002.mjs | 77 + .../module/models/skill_20241208202009.mjs | 77 + .../module/models/skill_20241208202010.mjs | 77 + .../module/models/skill_20241208202011.mjs | 77 + .../module/models/skill_20241208202013.mjs | 77 + .../module/models/skill_20241208202014.mjs | 77 + .../module/models/skill_20241208202017.mjs | 78 + .../module/models/skill_20241208202018.mjs | 78 + .../module/models/skill_20241208204413.mjs | 79 + .../module/models/skill_20241208204416.mjs | 79 + .../module/models/skill_20241208204422.mjs | 82 ++ .../module/models/skill_20241208204426.mjs | 82 ++ .../module/models/skill_20241208204428.mjs | 82 ++ .../module/models/skill_20241208204429.mjs | 82 ++ .../module/models/skill_20241208204530.mjs | 82 ++ .../module/models/skill_20241208204648.mjs | 84 ++ .../module/models/skill_20241208204651.mjs | 86 ++ .../module/models/skill_20241208204652.mjs | 87 ++ .../module/models/skill_20241208204659.mjs | 88 ++ .../module/models/skill_20241208204754.mjs | 82 ++ .../module/models/skill_20241208204926.mjs | 84 ++ .../module/models/skill_20241208204929.mjs | 84 ++ .../module/models/skill_20241208204931.mjs | 86 ++ .../module/models/skill_20241208204936.mjs | 94 ++ .../module/models/skill_20241208204937.mjs | 94 ++ .../module/models/skill_20241208204940.mjs | 87 ++ .../module/models/skill_20241208204941.mjs | 87 ++ .../module/models/skill_20241208204944.mjs | 87 ++ .../module/models/skill_20241208204948.mjs | 87 ++ .../module/models/skill_20241208204949.mjs | 87 ++ .../module/models/skill_20241208204950.mjs | 87 ++ .../module/models/skill_20241208204956.mjs | 88 ++ .../module/models/skill_20241208204957.mjs | 88 ++ .../module/models/skill_20241208205030.mjs | 89 ++ .../module/models/skill_20241208205040.mjs | 89 ++ .../module/models/skill_20241208205053.mjs | 89 ++ .../module/models/skill_20241208205057.mjs | 89 ++ .../module/models/skill_20241208205112.mjs | 89 ++ .../module/models/skill_20241208205114.mjs | 89 ++ .../module/models/skill_20241208205115.mjs | 89 ++ .../module/models/skill_20241208205116.mjs | 89 ++ .../module/models/skill_20241208205119.mjs | 90 ++ .../module/models/skill_20241208205127.mjs | 90 ++ .../module/models/skill_20241208205129.mjs | 92 ++ .../module/models/skill_20241208205137.mjs | 93 ++ .../module/models/skill_20241208205142.mjs | 92 ++ .../module/models/skill_20241208205143.mjs | 92 ++ .../module/models/skill_20241208205145.mjs | 92 ++ .../module/models/skill_20241208205151.mjs | 92 ++ .../module/models/skill_20241208205152.mjs | 92 ++ .../module/models/skill_20241208205153.mjs | 92 ++ .../module/models/skill_20241208205157.mjs | 91 ++ .../module/models/skill_20241208205158.mjs | 91 ++ .../module/models/skill_20241208205202.mjs | 92 ++ .../module/models/skill_20241208205205.mjs | 92 ++ .../module/models/skill_20241208205206.mjs | 92 ++ .../module/models/skill_20241208205207.mjs | 92 ++ .../module/models/skill_20241208205208.mjs | 92 ++ .../module/models/skill_20241208205209.mjs | 92 ++ .../module/models/skill_20241208205248.mjs | 92 ++ .../module/models/skill_20241208205250.mjs | 92 ++ .../module/models/skill_20241208205251.mjs | 92 ++ .../module/models/skill_20241208205406.mjs | 93 ++ .../module/models/skill_20241208205432.mjs | 93 ++ .../module/models/skill_20241208205435.mjs | 93 ++ .../module/models/skill_20241208205436.mjs | 93 ++ .../module/models/skill_20241208205439.mjs | 93 ++ .../module/models/skill_20241208205528.mjs | 93 ++ .../module/models/skill_20241208205532.mjs | 93 ++ .../module/models/skill_20241208205534.mjs | 93 ++ .../module/models/skill_20241208205536.mjs | 93 ++ .../module/models/skill_20241208205602.mjs | 93 ++ .../module/models/skill_20241208205604.mjs | 93 ++ .../module/models/skill_20241208205658.mjs | 93 ++ .../module/models/skill_20241208205659.mjs | 93 ++ .../module/models/skill_20241208205730.mjs | 93 ++ .../module/models/skill_20241208205731.mjs | 93 ++ .../module/models/skill_20241208205733.mjs | 93 ++ .../module/models/skill_20241208205737.mjs | 93 ++ .../module/models/skill_20241208205857.mjs | 93 ++ .../module/models/skill_20241208205858.mjs | 93 ++ .../module/models/skill_20241208205859.mjs | 93 ++ .../module/models/skill_20241208205900.mjs | 93 ++ .../module/models/skill_20241208205922.mjs | 93 ++ .../module/models/skill_20241208205923.mjs | 93 ++ .../module/models/skill_20241208205928.mjs | 94 ++ .../module/models/skill_20241208205930.mjs | 94 ++ .../module/models/skill_20241208205932.mjs | 94 ++ .../module/models/skill_20241208205933.mjs | 94 ++ .../module/models/skill_20241208205934.mjs | 94 ++ .../module/models/skill_20241208205958.mjs | 94 ++ .../module/models/skill_20241208205959.mjs | 94 ++ .../module/models/skill_20241208210010.mjs | 95 ++ .../module/models/skill_20241208210014.mjs | 95 ++ .../module/models/skill_20241208210016.mjs | 95 ++ .../module/models/skill_20241208210017.mjs | 95 ++ .../module/models/skill_20241208210059.mjs | 95 ++ .../module/models/skill_20241208210107.mjs | 94 ++ .../module/models/skill_20241208210108.mjs | 94 ++ .../module/models/skill_20241208210109.mjs | 94 ++ .../module/models/skill_20241208210110.mjs | 94 ++ .../module/models/skill_20241208210111.mjs | 94 ++ .../module/models/skill_20241208210112.mjs | 94 ++ .../module/models/skill_20241208210113.mjs | 94 ++ .../module/models/skill_20241208210128.mjs | 94 ++ .../module/models/skill_20241208210132.mjs | 94 ++ .../module/models/skill_20241208210133.mjs | 94 ++ .../models/vulnerability_20241130073315.mjs | 16 + .../models/vulnerability_20241217070643.mjs | 17 + .../models/vulnerability_20241217070645.mjs | 17 + .../models/vulnerability_20241217070647.mjs | 17 + .../models/vulnerability_20241217070658.mjs | 17 + .../models/vulnerability_20241217070659.mjs | 17 + .../models/vulnerability_20241217070702.mjs | 17 + .../module/models/weapon_20241207222848.mjs | 54 + .../module/models/weapon_20241208155859.mjs | 55 + .../module/models/weapon_20241208155901.mjs | 55 + .../module/models/weapon_20241208155902.mjs | 56 + .../module/models/weapon_20241210071237.mjs | 56 + .../module/models/weapon_20241210071617.mjs | 56 + .../module/models/weapon_20241210071618.mjs | 56 + .../module/models/weapon_20241210071850.mjs | 56 + .../module/models/weapon_20241210172431.mjs | 57 + .../module/models/weapon_20241217070154.mjs | 57 + .../module/models/weapon_20241217070159.mjs | 57 + .../module/models/weapon_20241217070201.mjs | 57 + .../module/models/weapon_20241217070204.mjs | 57 + .../module/models/weapon_20241217070205.mjs | 57 + .../module/models/weapon_20241217070211.mjs | 57 + .../module/models/weapon_20241217070212.mjs | 57 + .../module/models/weapon_20241217070242.mjs | 58 + .../module/models/weapon_20241217070248.mjs | 58 + .../module/models/weapon_20241217070250.mjs | 58 + .../module/models/weapon_20241217070253.mjs | 58 + .../module/models/weapon_20241217070501.mjs | 58 + .../module/models/weapon_20241217070505.mjs | 58 + .../module/models/weapon_20241217070506.mjs | 58 + .../module/models/weapon_20241217070510.mjs | 58 + .../module/models/weapon_20241217070511.mjs | 58 + .../module/models/weapon_20241217070512.mjs | 58 + .history/module/utils_20241121235547.mjs | 23 + .history/module/utils_20241208203936.mjs | 15 + .history/module/utils_20241208203937.mjs | 15 + .history/module/utils_20241208203944.mjs | 14 + .history/module/utils_20241208203945.mjs | 14 + .history/module/utils_20241208204002.mjs | 14 + .history/module/utils_20241208204004.mjs | 13 + .history/styles/character_20241207085600.less | 358 +++++ .history/styles/character_20241210211946.less | 332 +++++ .history/styles/character_20241210211954.less | 357 +++++ .history/styles/character_20241210211958.less | 357 +++++ .history/styles/character_20241210212000.less | 357 +++++ .history/styles/character_20241210212010.less | 357 +++++ .history/styles/character_20241210212016.less | 357 +++++ .history/styles/character_20241210212032.less | 357 +++++ .history/styles/character_20241210212039.less | 357 +++++ .history/styles/character_20241210212134.less | 357 +++++ .history/styles/character_20241210212135.less | 357 +++++ .history/styles/character_20241210212141.less | 357 +++++ .history/styles/character_20241210212147.less | 357 +++++ .history/styles/character_20241210212150.less | 357 +++++ .history/styles/character_20241210212352.less | 360 +++++ .history/styles/character_20241210212356.less | 361 +++++ .history/styles/character_20241210212357.less | 361 +++++ .history/styles/character_20241210212358.less | 361 +++++ .history/styles/character_20241210212401.less | 361 +++++ .history/styles/character_20241210212412.less | 361 +++++ .history/styles/character_20241210212419.less | 361 +++++ .history/styles/character_20241210212429.less | 362 +++++ .history/styles/character_20241210212431.less | 362 +++++ .history/styles/character_20241210212432.less | 362 +++++ .history/styles/character_20241210212435.less | 362 +++++ .history/styles/character_20241210212437.less | 362 +++++ .history/styles/character_20241210212439.less | 362 +++++ .history/styles/character_20241210212447.less | 362 +++++ .history/styles/character_20241210212618.less | 363 +++++ .history/styles/character_20241210212619.less | 363 +++++ .history/styles/character_20241210212656.less | 363 +++++ .history/styles/character_20241210225459.less | 393 +++++ .history/styles/character_20241210225503.less | 393 +++++ .history/styles/character_20241210225508.less | 393 +++++ .history/styles/character_20241210231314.less | 424 ++++++ .history/styles/character_20241210231320.less | 424 ++++++ .history/styles/character_20241210231323.less | 424 ++++++ .history/styles/character_20241210231521.less | 424 ++++++ .history/styles/character_20241210231528.less | 424 ++++++ .history/styles/character_20241210231535.less | 424 ++++++ .history/styles/character_20241210231540.less | 424 ++++++ .../fvtt-lethal-fantasy_20241201145505.less | 20 + .../fvtt-lethal-fantasy_20241209151130.less | 21 + .../fvtt-lethal-fantasy_20241209151132.less | 21 + .../fvtt-lethal-fantasy_20241209151134.less | 21 + .../fvtt-lethal-fantasy_20241210071307.less | 20 + .history/styles/miracle_20241209151116.less | 0 .history/styles/miracle_20241209151119.less | 17 + .history/styles/miracle_20241209151121.less | 17 + .history/styles/miracle_20241209151123.less | 17 + .history/styles/miracle_20241209151125.less | 17 + .history/system_20241207223959.json | 70 + .history/system_20241209231426.json | 71 + .history/system_20241209231428.json | 71 + .history/system_20241209231431.json | 71 + .history/system_20241209231432.json | 71 + .history/system_20241210070129.json | 71 + .history/system_20241210071346.json | 70 + .history/system_20241210174329.json | 70 + .history/system_20241210231017.json | 70 + .history/system_20241217070806.json | 70 + .history/templates/armor_20241201145025.hbs | 27 + .history/templates/armor_20241210070528.hbs | 27 + .history/templates/armor_20241210070529.hbs | 27 + .history/templates/armor_20241210070530.hbs | 27 + .history/templates/armor_20241210070533.hbs | 27 + .history/templates/armor_20241210070534.hbs | 27 + .history/templates/armor_20241210070701.hbs | 27 + .history/templates/armor_20241210070736.hbs | 26 + .history/templates/armor_20241210070751.hbs | 27 + .history/templates/armor_20241210070755.hbs | 27 + .history/templates/armor_20241210070818.hbs | 27 + .history/templates/armor_20241210070952.hbs | 27 + .history/templates/armor_20241210070955.hbs | 27 + .history/templates/armor_20241210071015.hbs | 27 + .history/templates/armor_20241210071020.hbs | 27 + .history/templates/armor_20241210071023.hbs | 27 + .history/templates/armor_20241210071034.hbs | 27 + .history/templates/armor_20241210071035.hbs | 27 + .history/templates/armor_20241210071641.hbs | 27 + .history/templates/armor_20241210071642.hbs | 27 + .history/templates/armor_20241210071758.hbs | 27 + .history/templates/armor_20241210072317.hbs | 27 + .history/templates/armor_20241210072318.hbs | 27 + .history/templates/armor_20241210172459.hbs | 29 + .history/templates/armor_20241210172503.hbs | 29 + .history/templates/armor_20241210172506.hbs | 29 + .history/templates/armor_20241210172508.hbs | 29 + .history/templates/armor_20241210172510.hbs | 30 + .history/templates/armor_20241210172514.hbs | 30 + .history/templates/armor_20241210172515.hbs | 30 + .history/templates/armor_20241210173347.hbs | 30 + .history/templates/armor_20241210173505.hbs | 30 + .history/templates/armor_20241210173931.hbs | 30 + .history/templates/armor_20241210173933.hbs | 30 + .../character-biography_20241207082848.hbs | 10 + .../character-biography_20241208154119.hbs | 10 + .../character-main_20241207223924.hbs | 110 ++ .../character-main_20241210205056.hbs | 111 ++ .../character-main_20241210205104.hbs | 119 ++ .../character-main_20241210205109.hbs | 119 ++ .../character-main_20241210205110.hbs | 119 ++ .../character-main_20241210205150.hbs | 119 ++ .../character-main_20241210205152.hbs | 119 ++ .../character-main_20241210205157.hbs | 119 ++ .../character-main_20241210205202.hbs | 119 ++ .../character-main_20241210205230.hbs | 119 ++ .../character-main_20241210205232.hbs | 119 ++ .../character-main_20241210205233.hbs | 119 ++ .../character-main_20241210205235.hbs | 118 ++ .../character-main_20241210205236.hbs | 118 ++ .../character-main_20241210205244.hbs | 118 ++ .../character-main_20241210205245.hbs | 118 ++ .../character-main_20241210205246.hbs | 118 ++ .../character-main_20241210205247.hbs | 117 ++ .../character-main_20241210205249.hbs | 115 ++ .../character-main_20241210205250.hbs | 115 ++ .../character-main_20241210205251.hbs | 114 ++ .../character-main_20241210205444.hbs | 114 ++ .../character-main_20241210211349.hbs | 114 ++ .../character-main_20241210211350.hbs | 114 ++ .../character-main_20241210211351.hbs | 114 ++ .../character-main_20241210211354.hbs | 113 ++ .../character-main_20241210211355.hbs | 113 ++ .../character-main_20241210211356.hbs | 113 ++ .../character-main_20241210211404.hbs | 114 ++ .../character-main_20241210211405.hbs | 115 ++ .../character-main_20241210211409.hbs | 119 ++ .../character-main_20241210211424.hbs | 119 ++ .../character-main_20241210211426.hbs | 119 ++ .../character-main_20241210211427.hbs | 119 ++ .../character-main_20241210211429.hbs | 119 ++ .../character-main_20241210211456.hbs | 119 ++ .../character-main_20241210211513.hbs | 117 ++ .../character-main_20241210211515.hbs | 119 ++ .../character-main_20241210211524.hbs | 121 ++ .../character-main_20241210211538.hbs | 121 ++ .../character-main_20241210211540.hbs | 121 ++ .../character-main_20241210211542.hbs | 121 ++ .../character-main_20241210211546.hbs | 121 ++ .../character-main_20241210211556.hbs | 121 ++ .../character-main_20241210211559.hbs | 123 ++ .../character-main_20241210211612.hbs | 123 ++ .../character-main_20241210211614.hbs | 123 ++ .../character-main_20241210211618.hbs | 123 ++ .../character-main_20241210211620.hbs | 125 ++ .../character-main_20241210211628.hbs | 125 ++ .../character-main_20241210211629.hbs | 125 ++ .../character-main_20241210211630.hbs | 125 ++ .../character-main_20241210211631.hbs | 127 ++ .../character-main_20241210211639.hbs | 127 ++ .../character-main_20241210211640.hbs | 127 ++ .../character-main_20241210211641.hbs | 127 ++ .../character-main_20241210211642.hbs | 127 ++ .../character-main_20241210211723.hbs | 128 ++ .../character-main_20241210211726.hbs | 129 ++ .../character-main_20241210211727.hbs | 129 ++ .../character-main_20241210211732.hbs | 130 ++ .../character-main_20241210211733.hbs | 130 ++ .../character-main_20241210211734.hbs | 136 ++ .../character-main_20241210211746.hbs | 136 ++ .../character-main_20241210211837.hbs | 136 ++ .../character-main_20241210211838.hbs | 136 ++ .../character-main_20241210211847.hbs | 136 ++ .../character-main_20241210211856.hbs | 136 ++ .../character-main_20241210212330.hbs | 136 ++ .../character-main_20241210212332.hbs | 136 ++ .../character-main_20241210212335.hbs | 136 ++ .../character-main_20241210212338.hbs | 136 ++ .../character-main_20241210212340.hbs | 136 ++ .../character-main_20241210212511.hbs | 136 ++ .../character-main_20241210212515.hbs | 136 ++ .../character-main_20241210212531.hbs | 136 ++ .../character-main_20241210212533.hbs | 136 ++ .../character-main_20241210212541.hbs | 136 ++ .../character-main_20241210212543.hbs | 136 ++ .../character-main_20241210212548.hbs | 136 ++ .../character-main_20241210212551.hbs | 136 ++ .../character-main_20241210212552.hbs | 136 ++ .../character-main_20241210212554.hbs | 136 ++ .../character-main_20241210212556.hbs | 136 ++ .../character-main_20241210212559.hbs | 136 ++ .../character-main_20241210212723.hbs | 164 +++ .../character-main_20241210212728.hbs | 164 +++ .../character-main_20241210212732.hbs | 164 +++ .../character-main_20241210212734.hbs | 164 +++ .../character-main_20241210212738.hbs | 164 +++ .../character-main_20241210212741.hbs | 164 +++ .../character-main_20241210212754.hbs | 164 +++ .../character-main_20241210212755.hbs | 164 +++ .../character-main_20241210212758.hbs | 164 +++ .../character-main_20241210212805.hbs | 164 +++ .../character-main_20241210212809.hbs | 153 ++ .../character-main_20241210212815.hbs | 153 ++ .../character-main_20241210212819.hbs | 153 ++ .../character-main_20241210212821.hbs | 153 ++ .../character-main_20241210212824.hbs | 153 ++ .../character-main_20241210212826.hbs | 153 ++ .../character-main_20241210212828.hbs | 153 ++ .../character-main_20241210212829.hbs | 153 ++ .../character-main_20241210212832.hbs | 153 ++ .../character-main_20241210212835.hbs | 153 ++ .../character-main_20241210212844.hbs | 153 ++ .../character-main_20241210212846.hbs | 153 ++ .../character-main_20241210212847.hbs | 153 ++ .../character-main_20241210212850.hbs | 153 ++ .../character-main_20241210212851.hbs | 153 ++ .../character-main_20241210212852.hbs | 153 ++ .../character-main_20241210212853.hbs | 153 ++ .../character-main_20241210212854.hbs | 153 ++ .../character-main_20241210212855.hbs | 153 ++ .../character-main_20241210212926.hbs | 153 ++ .../character-main_20241210212948.hbs | 153 ++ .../character-main_20241210212949.hbs | 153 ++ .../character-main_20241210212950.hbs | 153 ++ .../character-main_20241210212951.hbs | 153 ++ .../character-main_20241210225237.hbs | 153 ++ .../character-main_20241210225301.hbs | 137 ++ .../character-main_20241210225313.hbs | 153 ++ .../character-main_20241210225445.hbs | 153 ++ .../character-main_20241210225513.hbs | 153 ++ .../character-main_20241210225626.hbs | 153 ++ .../character-main_20241210225631.hbs | 153 ++ .../character-main_20241210225633.hbs | 153 ++ .../character-main_20241210225635.hbs | 153 ++ .../character-main_20241210225639.hbs | 153 ++ .../character-main_20241210225642.hbs | 153 ++ .../character-main_20241210225643.hbs | 153 ++ .../character-main_20241210225700.hbs | 153 ++ .../character-main_20241210225725.hbs | 153 ++ .../character-main_20241210225728.hbs | 153 ++ .../character-main_20241210225730.hbs | 153 ++ .../character-main_20241210225939.hbs | 155 ++ .../character-main_20241210225941.hbs | 156 ++ .../character-main_20241210225942.hbs | 155 ++ .../character-main_20241210225944.hbs | 155 ++ .../character-main_20241210225947.hbs | 156 ++ .../character-main_20241210225948.hbs | 157 ++ .../character-main_20241210225951.hbs | 157 ++ .../character-main_20241210230000.hbs | 158 ++ .../character-main_20241210230003.hbs | 158 ++ .../character-main_20241210230004.hbs | 158 ++ .../character-main_20241210230047.hbs | 158 ++ .../character-main_20241210230052.hbs | 159 ++ .../character-main_20241210230055.hbs | 161 ++ .../character-main_20241210230059.hbs | 162 +++ .../character-main_20241210230104.hbs | 162 +++ .../character-main_20241210230108.hbs | 162 +++ .../character-main_20241210230109.hbs | 162 +++ .../character-main_20241210230114.hbs | 163 +++ .../character-main_20241210230117.hbs | 163 +++ .../character-main_20241210230118.hbs | 163 +++ .../character-main_20241210230119.hbs | 162 +++ .../character-main_20241210230132.hbs | 162 +++ .../character-main_20241210230150.hbs | 162 +++ .../character-main_20241210230151.hbs | 162 +++ .../character-main_20241210230206.hbs | 162 +++ .../character-main_20241210230207.hbs | 162 +++ .../character-main_20241210230208.hbs | 162 +++ .../character-main_20241210230209.hbs | 162 +++ .../character-main_20241210230217.hbs | 162 +++ .../character-main_20241210230424.hbs | 164 +++ .../character-main_20241210230427.hbs | 163 +++ .../character-main_20241210230442.hbs | 163 +++ .../character-main_20241210230447.hbs | 163 +++ .../character-main_20241210230450.hbs | 164 +++ .../character-main_20241210230452.hbs | 164 +++ .../character-main_20241210230453.hbs | 164 +++ .../character-main_20241210230535.hbs | 164 +++ .../character-main_20241210230539.hbs | 164 +++ .../character-main_20241210230605.hbs | 163 +++ .../character-main_20241210230613.hbs | 164 +++ .../character-main_20241210230616.hbs | 164 +++ .../character-main_20241210230618.hbs | 164 +++ .../character-main_20241210230622.hbs | 164 +++ .../character-main_20241210230632.hbs | 170 +++ .../character-main_20241210230637.hbs | 170 +++ .../character-main_20241210230640.hbs | 170 +++ .../character-main_20241210230645.hbs | 170 +++ .../character-main_20241210230647.hbs | 170 +++ .../character-main_20241210230651.hbs | 170 +++ .../character-main_20241210230652.hbs | 170 +++ .../character-main_20241210230655.hbs | 170 +++ .../character-main_20241210230656.hbs | 170 +++ .../character-main_20241210230712.hbs | 170 +++ .../character-main_20241210230713.hbs | 170 +++ .../character-main_20241210230715.hbs | 170 +++ .../character-main_20241210230722.hbs | 170 +++ .../character-main_20241210230812.hbs | 176 +++ .../character-main_20241210230817.hbs | 176 +++ .../character-main_20241210230821.hbs | 176 +++ .../character-main_20241210230827.hbs | 176 +++ .../character-main_20241210230830.hbs | 176 +++ .../character-main_20241210231056.hbs | 193 +++ .../character-main_20241210231101.hbs | 193 +++ .../character-main_20241210231106.hbs | 193 +++ .../character-main_20241210231109.hbs | 193 +++ .../character-main_20241210231125.hbs | 193 +++ .../character-main_20241210231127.hbs | 193 +++ .../character-main_20241210231132.hbs | 193 +++ .../character-main_20241210231135.hbs | 193 +++ .../character-main_20241210231139.hbs | 193 +++ .../character-main_20241210231143.hbs | 193 +++ .../character-main_20241210231144.hbs | 193 +++ .../character-main_20241210231151.hbs | 193 +++ .../character-main_20241210231203.hbs | 193 +++ .../character-main_20241210231208.hbs | 193 +++ .../character-main_20241210231209.hbs | 193 +++ .../character-main_20241210231219.hbs | 193 +++ .../character-main_20241210231222.hbs | 193 +++ .../character-main_20241210231223.hbs | 193 +++ .../character-main_20241210231225.hbs | 193 +++ .../character-main_20241210231233.hbs | 193 +++ .../character-main_20241210231235.hbs | 193 +++ .../character-main_20241210231240.hbs | 193 +++ .../character-main_20241210231243.hbs | 193 +++ .../character-main_20241210231245.hbs | 193 +++ .../character-main_20241210231246.hbs | 193 +++ .../character-main_20241210231253.hbs | 192 +++ .../character-main_20241210231257.hbs | 191 +++ .../character-main_20241210231300.hbs | 190 +++ .../character-main_20241210231301.hbs | 190 +++ .../character-main_20241210231415.hbs | 192 +++ .../character-main_20241210231418.hbs | 192 +++ .../character-main_20241210231422.hbs | 192 +++ .../character-main_20241210231428.hbs | 192 +++ .../character-main_20241210231441.hbs | 192 +++ .../character-main_20241210231442.hbs | 192 +++ .../character-spells_20241207085616.hbs | 27 + .../character-spells_20241208154207.hbs | 27 + .../character-spells_20241208154208.hbs | 26 + .../character-spells_20241208154211.hbs | 26 + .../character-weapons_20241207085046.hbs | 70 + .../character-weapons_20241208154137.hbs | 71 + .../character-weapons_20241208154150.hbs | 48 + .../templates/equipment_20241130174329.hbs | 14 + .../templates/equipment_20241210071700.hbs | 15 + .../templates/equipment_20241210071704.hbs | 15 + .../templates/equipment_20241210071707.hbs | 15 + .../templates/equipment_20241210072328.hbs | 15 + .history/templates/miracle_20241209151331.hbs | 0 .history/templates/miracle_20241209151334.hbs | 29 + .history/templates/miracle_20241209151340.hbs | 27 + .history/templates/miracle_20241209151341.hbs | 27 + .history/templates/miracle_20241209151342.hbs | 28 + .history/templates/miracle_20241209151345.hbs | 29 + .history/templates/miracle_20241209151351.hbs | 29 + .history/templates/miracle_20241209151352.hbs | 29 + .history/templates/miracle_20241209151353.hbs | 30 + .history/templates/miracle_20241209151358.hbs | 30 + .history/templates/miracle_20241209151359.hbs | 30 + .history/templates/miracle_20241209151405.hbs | 30 + .history/templates/miracle_20241209151406.hbs | 30 + .history/templates/miracle_20241209151410.hbs | 30 + .history/templates/miracle_20241209151411.hbs | 30 + .history/templates/miracle_20241209151413.hbs | 29 + .history/templates/miracle_20241209151414.hbs | 29 + .history/templates/miracle_20241209151416.hbs | 29 + .history/templates/miracle_20241209231609.hbs | 29 + .history/templates/miracle_20241209231704.hbs | 29 + .history/templates/miracle_20241209231709.hbs | 29 + .history/templates/miracle_20241209231719.hbs | 29 + .history/templates/miracle_20241210072338.hbs | 29 + .history/templates/shield_20241203131106.hbs | 59 + .history/templates/shield_20241210071717.hbs | 59 + .history/templates/shield_20241210071719.hbs | 59 + .history/templates/shield_20241210071720.hbs | 59 + .history/templates/shield_20241210072355.hbs | 59 + .history/templates/shield_20241210172525.hbs | 61 + .history/templates/skill_20241130132029.hbs | 21 + .history/templates/skill_20241208155751.hbs | 22 + .history/templates/skill_20241208155755.hbs | 22 + .history/templates/skill_20241208155759.hbs | 28 + .history/templates/skill_20241208155807.hbs | 28 + .history/templates/skill_20241208155810.hbs | 26 + .history/templates/skill_20241208155814.hbs | 26 + .history/templates/skill_20241208155819.hbs | 26 + .history/templates/skill_20241208155820.hbs | 26 + .history/templates/skill_20241208155846.hbs | 26 + .history/templates/skill_20241208201615.hbs | 27 + .history/templates/skill_20241208201626.hbs | 27 + .history/templates/skill_20241208201631.hbs | 27 + .history/templates/skill_20241208201649.hbs | 27 + .history/templates/skill_20241208201659.hbs | 27 + .history/templates/skill_20241208201704.hbs | 27 + .history/templates/skill_20241208201705.hbs | 27 + .history/templates/skill_20241208201707.hbs | 29 + .history/templates/skill_20241208201711.hbs | 29 + .history/templates/skill_20241208201713.hbs | 29 + .history/templates/skill_20241208201715.hbs | 29 + .history/templates/skill_20241208201717.hbs | 29 + .history/templates/skill_20241208201718.hbs | 29 + .history/templates/skill_20241208203751.hbs | 29 + .history/templates/skill_20241208204250.hbs | 30 + .history/templates/skill_20241208204253.hbs | 30 + .history/templates/skill_20241208204258.hbs | 33 + .history/templates/skill_20241208204302.hbs | 34 + .history/templates/skill_20241208204311.hbs | 34 + .history/templates/skill_20241208204312.hbs | 34 + .history/templates/skill_20241208204314.hbs | 34 + .history/templates/skill_20241208204317.hbs | 32 + .history/templates/skill_20241208204318.hbs | 32 + .history/templates/skill_20241208204337.hbs | 32 + .history/templates/skill_20241208204340.hbs | 32 + .history/templates/skill_20241208204448.hbs | 32 + .history/templates/skill_20241208204601.hbs | 32 + .history/templates/skill_20241208204619.hbs | 32 + .history/templates/skill_20241208204621.hbs | 32 + .history/templates/skill_20241208204624.hbs | 32 + .history/templates/skill_20241208204626.hbs | 32 + .history/templates/skill_20241208204629.hbs | 32 + .history/templates/skill_20241208204630.hbs | 32 + .history/templates/skill_20241208204631.hbs | 32 + .history/templates/skill_20241208204634.hbs | 32 + .history/templates/skill_20241208205643.hbs | 31 + .history/templates/skill_20241208205644.hbs | 31 + .history/templates/skill_20241210072108.hbs | 31 + .history/templates/skill_20241210072122.hbs | 31 + .history/templates/skill_20241210072123.hbs | 31 + .history/templates/skill_20241210072124.hbs | 31 + .history/templates/spell_20241207223113.hbs | 29 + .history/templates/spell_20241210072359.hbs | 29 + .../vulnerability_20241130173822.hbs | 13 + .../vulnerability_20241210072403.hbs | 13 + .../vulnerability_20241217070713.hbs | 13 + .../vulnerability_20241217070715.hbs | 13 + .history/templates/weapon_20241207222221.hbs | 74 + .history/templates/weapon_20241208154950.hbs | 74 + .history/templates/weapon_20241208154951.hbs | 74 + .history/templates/weapon_20241208154953.hbs | 74 + .history/templates/weapon_20241208154957.hbs | 74 + .history/templates/weapon_20241208154958.hbs | 74 + .history/templates/weapon_20241208154959.hbs | 74 + .history/templates/weapon_20241208155008.hbs | 74 + .history/templates/weapon_20241208155009.hbs | 74 + .history/templates/weapon_20241208155020.hbs | 74 + .history/templates/weapon_20241208155035.hbs | 74 + .history/templates/weapon_20241208155037.hbs | 74 + .history/templates/weapon_20241208155038.hbs | 74 + .history/templates/weapon_20241208155039.hbs | 74 + .history/templates/weapon_20241208155919.hbs | 75 + .history/templates/weapon_20241208155923.hbs | 75 + .history/templates/weapon_20241208155928.hbs | 75 + .history/templates/weapon_20241208155937.hbs | 75 + .history/templates/weapon_20241208155941.hbs | 75 + .history/templates/weapon_20241208155951.hbs | 76 + .history/templates/weapon_20241208155954.hbs | 75 + .history/templates/weapon_20241208155955.hbs | 75 + .history/templates/weapon_20241210071725.hbs | 75 + .history/templates/weapon_20241210071727.hbs | 75 + .history/templates/weapon_20241210072406.hbs | 75 + .history/templates/weapon_20241210172530.hbs | 77 + .history/templates/weapon_20241217070551.hbs | 77 + .history/templates/weapon_20241217070555.hbs | 77 + css/fvtt-lethal-fantasy.css | 170 +-- fonts/caslonpro-bold.otf | Bin 142972 -> 0 bytes fonts/caslonpro-bolditalic.otf | Bin 169448 -> 0 bytes fonts/caslonpro-italic.otf | Bin 167264 -> 0 bytes fonts/caslonpro-regular.otf | Bin 161820 -> 0 bytes fonts/catfranken-deutsch.ttf | Bin 108136 -> 0 bytes lang/en.json | 43 + module/config/system.mjs | 1 + module/config/weapon.mjs | 9 + module/documents/item.mjs | 2 +- module/models/vulnerability.mjs | 1 + module/models/weapon.mjs | 3 +- styles/character.less | 110 +- system.json | 2 +- templates/character-main.hbs | 122 +- templates/vulnerability.hbs | 2 +- templates/weapon.hbs | 2 +- 1402 files changed, 333918 insertions(+), 140 deletions(-) create mode 100644 .history/lang/en_20241207230434.json create mode 100644 .history/lang/en_20241208160041.json create mode 100644 .history/lang/en_20241208160046.json create mode 100644 .history/lang/en_20241208160049.json create mode 100644 .history/lang/en_20241208160052.json create mode 100644 .history/lang/en_20241208160053.json create mode 100644 .history/lang/en_20241208160057.json create mode 100644 .history/lang/en_20241208160100.json create mode 100644 .history/lang/en_20241208160103.json create mode 100644 .history/lang/en_20241208160120.json create mode 100644 .history/lang/en_20241208160121.json create mode 100644 .history/lang/en_20241208160127.json create mode 100644 .history/lang/en_20241208160131.json create mode 100644 .history/lang/en_20241208160132.json create mode 100644 .history/lang/en_20241208160135.json create mode 100644 .history/lang/en_20241208160138.json create mode 100644 .history/lang/en_20241208160139.json create mode 100644 .history/lang/en_20241208160141.json create mode 100644 .history/lang/en_20241208160144.json create mode 100644 .history/lang/en_20241208160146.json create mode 100644 .history/lang/en_20241208160149.json create mode 100644 .history/lang/en_20241208160155.json create mode 100644 .history/lang/en_20241208160156.json create mode 100644 .history/lang/en_20241208160219.json create mode 100644 .history/lang/en_20241208160226.json create mode 100644 .history/lang/en_20241208160227.json create mode 100644 .history/lang/en_20241208160230.json create mode 100644 .history/lang/en_20241208160232.json create mode 100644 .history/lang/en_20241208160233.json create mode 100644 .history/lang/en_20241208160246.json create mode 100644 .history/lang/en_20241208160248.json create mode 100644 .history/lang/en_20241208160250.json create mode 100644 .history/lang/en_20241208160251.json create mode 100644 .history/lang/en_20241208160252.json create mode 100644 .history/lang/en_20241208160253.json create mode 100644 .history/lang/en_20241208160327.json create mode 100644 .history/lang/en_20241208160338.json create mode 100644 .history/lang/en_20241208160339.json create mode 100644 .history/lang/en_20241208160340.json create mode 100644 .history/lang/en_20241208201739.json create mode 100644 .history/lang/en_20241208201743.json create mode 100644 .history/lang/en_20241208201747.json create mode 100644 .history/lang/en_20241208201748.json create mode 100644 .history/lang/en_20241208201750.json create mode 100644 .history/lang/en_20241208201752.json create mode 100644 .history/lang/en_20241208201758.json create mode 100644 .history/lang/en_20241208201759.json create mode 100644 .history/lang/en_20241208201801.json create mode 100644 .history/lang/en_20241208201802.json create mode 100644 .history/lang/en_20241208201804.json create mode 100644 .history/lang/en_20241208201805.json create mode 100644 .history/lang/en_20241208201806.json create mode 100644 .history/lang/en_20241208201808.json create mode 100644 .history/lang/en_20241208201809.json create mode 100644 .history/lang/en_20241208201810.json create mode 100644 .history/lang/en_20241208201814.json create mode 100644 .history/lang/en_20241208201817.json create mode 100644 .history/lang/en_20241208201818.json create mode 100644 .history/lang/en_20241208201821.json create mode 100644 .history/lang/en_20241208201823.json create mode 100644 .history/lang/en_20241208201824.json create mode 100644 .history/lang/en_20241208201825.json create mode 100644 .history/lang/en_20241208204159.json create mode 100644 .history/lang/en_20241208204228.json create mode 100644 .history/lang/en_20241208204229.json create mode 100644 .history/lang/en_20241208204230.json create mode 100644 .history/lang/en_20241208204231.json create mode 100644 .history/lang/en_20241209151421.json create mode 100644 .history/lang/en_20241209151424.json create mode 100644 .history/lang/en_20241209151430.json create mode 100644 .history/lang/en_20241209151434.json create mode 100644 .history/lang/en_20241209151441.json create mode 100644 .history/lang/en_20241209151444.json create mode 100644 .history/lang/en_20241209151445.json create mode 100644 .history/lang/en_20241209151453.json create mode 100644 .history/lang/en_20241209151510.json create mode 100644 .history/lang/en_20241209151520.json create mode 100644 .history/lang/en_20241209151521.json create mode 100644 .history/lang/en_20241209151526.json create mode 100644 .history/lang/en_20241209151527.json create mode 100644 .history/lang/en_20241209151529.json create mode 100644 .history/lang/en_20241209151531.json create mode 100644 .history/lang/en_20241209151534.json create mode 100644 .history/lang/en_20241209151535.json create mode 100644 .history/lang/en_20241209151537.json create mode 100644 .history/lang/en_20241209151539.json create mode 100644 .history/lang/en_20241209151546.json create mode 100644 .history/lang/en_20241209151547.json create mode 100644 .history/lang/en_20241209151551.json create mode 100644 .history/lang/en_20241209151554.json create mode 100644 .history/lang/en_20241209151556.json create mode 100644 .history/lang/en_20241209151557.json create mode 100644 .history/lang/en_20241209151602.json create mode 100644 .history/lang/en_20241209151604.json create mode 100644 .history/lang/en_20241209151607.json create mode 100644 .history/lang/en_20241209151643.json create mode 100644 .history/lang/en_20241209151656.json create mode 100644 .history/lang/en_20241209151657.json create mode 100644 .history/lang/en_20241209151658.json create mode 100644 .history/lang/en_20241209231413.json create mode 100644 .history/lang/en_20241209231449.json create mode 100644 .history/lang/en_20241210071126.json create mode 100644 .history/lang/en_20241210071129.json create mode 100644 .history/lang/en_20241210071134.json create mode 100644 .history/lang/en_20241210071137.json create mode 100644 .history/lang/en_20241210071142.json create mode 100644 .history/lang/en_20241210071907.json create mode 100644 .history/lang/en_20241210071913.json create mode 100644 .history/lang/en_20241210071929.json create mode 100644 .history/lang/en_20241210071939.json create mode 100644 .history/lang/en_20241210071942.json create mode 100644 .history/lang/en_20241210071944.json create mode 100644 .history/lang/en_20241210071946.json create mode 100644 .history/lang/en_20241210071949.json create mode 100644 .history/lang/en_20241210072002.json create mode 100644 .history/lang/en_20241210075355.json create mode 100644 .history/lang/en_20241210075359.json create mode 100644 .history/lang/en_20241210075404.json create mode 100644 .history/lang/en_20241210075406.json create mode 100644 .history/lang/en_20241210075454.json create mode 100644 .history/lang/en_20241210075457.json create mode 100644 .history/lang/en_20241210075501.json create mode 100644 .history/lang/en_20241210075503.json create mode 100644 .history/lang/en_20241210075507.json create mode 100644 .history/lang/en_20241210075512.json create mode 100644 .history/lang/en_20241210075515.json create mode 100644 .history/lang/en_20241210075516.json create mode 100644 .history/lang/en_20241210075524.json create mode 100644 .history/lang/en_20241210075531.json create mode 100644 .history/lang/en_20241210075536.json create mode 100644 .history/lang/en_20241210075537.json create mode 100644 .history/lang/en_20241210075538.json create mode 100644 .history/lang/en_20241210075545.json create mode 100644 .history/lang/en_20241210075548.json create mode 100644 .history/lang/en_20241210075549.json create mode 100644 .history/lang/en_20241210075551.json create mode 100644 .history/lang/en_20241210075553.json create mode 100644 .history/lang/en_20241210075559.json create mode 100644 .history/lang/en_20241210075601.json create mode 100644 .history/lang/en_20241210075603.json create mode 100644 .history/lang/en_20241210075604.json create mode 100644 .history/lang/en_20241210075624.json create mode 100644 .history/lang/en_20241210075625.json create mode 100644 .history/lang/en_20241210172550.json create mode 100644 .history/lang/en_20241210172555.json create mode 100644 .history/lang/en_20241210172559.json create mode 100644 .history/lang/en_20241210172601.json create mode 100644 .history/lang/en_20241210172604.json create mode 100644 .history/lang/en_20241210172615.json create mode 100644 .history/lang/en_20241210172745.json create mode 100644 .history/lang/en_20241210172747.json create mode 100644 .history/lang/en_20241210172748.json create mode 100644 .history/lang/en_20241210173415.json create mode 100644 .history/lang/en_20241210173416.json create mode 100644 .history/lang/en_20241210173417.json create mode 100644 .history/lang/en_20241210173955.json create mode 100644 .history/lang/en_20241210173957.json create mode 100644 .history/lang/en_20241210205431.json create mode 100644 .history/lang/en_20241210205433.json create mode 100644 .history/lang/en_20241210205434.json create mode 100644 .history/lang/en_20241210205436.json create mode 100644 .history/lang/en_20241210205437.json create mode 100644 .history/lang/en_20241210211753.json create mode 100644 .history/lang/en_20241210211755.json create mode 100644 .history/lang/en_20241210211759.json create mode 100644 .history/lang/en_20241210225328.json create mode 100644 .history/lang/en_20241210225330.json create mode 100644 .history/lang/en_20241210225333.json create mode 100644 .history/lang/en_20241210225340.json create mode 100644 .history/lang/en_20241210225344.json create mode 100644 .history/lang/en_20241210225347.json create mode 100644 .history/lang/en_20241210225350.json create mode 100644 .history/lang/en_20241210225353.json create mode 100644 .history/lang/en_20241210225355.json create mode 100644 .history/lang/en_20241210225356.json create mode 100644 .history/lang/en_20241210225402.json create mode 100644 .history/lang/en_20241210225404.json create mode 100644 .history/lang/en_20241210225406.json create mode 100644 .history/lang/en_20241210225407.json create mode 100644 .history/lang/en_20241210225408.json create mode 100644 .history/lang/en_20241210225410.json create mode 100644 .history/lang/en_20241210225415.json create mode 100644 .history/lang/en_20241210225418.json create mode 100644 .history/lang/en_20241210225420.json create mode 100644 .history/lang/en_20241210225421.json create mode 100644 .history/lang/en_20241210225438.json create mode 100644 .history/lang/en_20241210225439.json create mode 100644 .history/lang/en_20241210225440.json create mode 100644 .history/lang/en_20241210225441.json create mode 100644 .history/lang/en_20241210225557.json create mode 100644 .history/lang/en_20241210225558.json create mode 100644 .history/lang/en_20241210225600.json create mode 100644 .history/lang/en_20241210230016.json create mode 100644 .history/lang/en_20241210230017.json create mode 100644 .history/lang/en_20241210230018.json create mode 100644 .history/lang/en_20241210230240.json create mode 100644 .history/lang/en_20241210230241.json create mode 100644 .history/lang/en_20241210230244.json create mode 100644 .history/lang/en_20241210230245.json create mode 100644 .history/lang/en_20241210230249.json create mode 100644 .history/lang/en_20241210230253.json create mode 100644 .history/lang/en_20241210230254.json create mode 100644 .history/lang/en_20241210230255.json create mode 100644 .history/lang/en_20241210230316.json create mode 100644 .history/lang/en_20241210230318.json create mode 100644 .history/lang/en_20241210230320.json create mode 100644 .history/lang/en_20241210230321.json create mode 100644 .history/lang/en_20241210230324.json create mode 100644 .history/lang/en_20241210230325.json create mode 100644 .history/lang/en_20241210230327.json create mode 100644 .history/lang/en_20241210230331.json create mode 100644 .history/lang/en_20241210230347.json create mode 100644 .history/lang/en_20241210230348.json create mode 100644 .history/lang/en_20241210230349.json create mode 100644 .history/lang/en_20241210230352.json create mode 100644 .history/lang/en_20241210230353.json create mode 100644 .history/lang/en_20241210230508.json create mode 100644 .history/lang/en_20241210230513.json create mode 100644 .history/lang/en_20241210230514.json create mode 100644 .history/lang/en_20241210230729.json create mode 100644 .history/lang/en_20241210230731.json create mode 100644 .history/lang/en_20241210230736.json create mode 100644 .history/lang/en_20241210230737.json create mode 100644 .history/lang/en_20241210230803.json create mode 100644 .history/lang/en_20241210230840.json create mode 100644 .history/lang/en_20241210230841.json create mode 100644 .history/lang/en_20241210230842.json create mode 100644 .history/lang/en_20241210230925.json create mode 100644 .history/lang/en_20241210231340.json create mode 100644 .history/lang/en_20241210231342.json create mode 100644 .history/lang/en_20241210231345.json create mode 100644 .history/lang/en_20241210231349.json create mode 100644 .history/lang/en_20241210231350.json create mode 100644 .history/lang/en_20241210231353.json create mode 100644 .history/lang/en_20241210231354.json create mode 100644 .history/lang/en_20241210231357.json create mode 100644 .history/lang/en_20241210231358.json create mode 100644 .history/lang/en_20241210231359.json create mode 100644 .history/lang/en_20241210231452.json create mode 100644 .history/lang/en_20241210231455.json create mode 100644 .history/lang/en_20241210231456.json create mode 100644 .history/lang/en_20241210231457.json create mode 100644 .history/lang/en_20241217070308.json create mode 100644 .history/lang/en_20241217070311.json create mode 100644 .history/lang/en_20241217070313.json create mode 100644 .history/lang/en_20241217070326.json create mode 100644 .history/lang/en_20241217070729.json create mode 100644 .history/lang/en_20241217070732.json create mode 100644 .history/lang/en_20241217070733.json create mode 100644 .history/lang/en_20241217070734.json create mode 100644 .history/lethal-fantasy_20241207081924.mjs create mode 100644 .history/lethal-fantasy_20241209151149.mjs create mode 100644 .history/lethal-fantasy_20241209151153.mjs create mode 100644 .history/lethal-fantasy_20241209151155.mjs create mode 100644 .history/lethal-fantasy_20241209151158.mjs create mode 100644 .history/lethal-fantasy_20241209151200.mjs create mode 100644 .history/lethal-fantasy_20241209151204.mjs create mode 100644 .history/lethal-fantasy_20241209151205.mjs create mode 100644 .history/lethal-fantasy_20241209151206.mjs create mode 100644 .history/lethal-fantasy_20241209151207.mjs create mode 100644 .history/lethal-fantasy_20241209151209.mjs create mode 100644 .history/lethal-fantasy_20241209231439.mjs create mode 100644 .history/lethal-fantasy_20241210071333.mjs create mode 100644 .history/lethal-fantasy_20241210071338.mjs create mode 100644 .history/module/applications/_module_20241201145411.mjs create mode 100644 .history/module/applications/_module_20241209151255.mjs create mode 100644 .history/module/applications/_module_20241209151257.mjs create mode 100644 .history/module/applications/_module_20241209151258.mjs create mode 100644 .history/module/applications/_module_20241210071442.mjs create mode 100644 .history/module/applications/sheets/armor-sheet_20241121235703.mjs create mode 100644 .history/module/applications/sheets/armor-sheet_20241210071050.mjs create mode 100644 .history/module/applications/sheets/armor-sheet_20241210072306.mjs create mode 100644 .history/module/applications/sheets/armor-sheet_20241210072307.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241207085714.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153603.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153604.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153607.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153608.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153649.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153652.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153655.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153656.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208153657.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154229.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154230.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154238.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154242.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154244.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154246.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154249.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154525.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154526.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154527.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154528.mjs create mode 100644 .history/module/applications/sheets/character-sheet_20241208154530.mjs create mode 100644 .history/module/applications/sheets/equipment-sheet_20241130083352.mjs create mode 100644 .history/module/applications/sheets/equipment-sheet_20241210072300.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151222.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151225.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151230.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151231.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151234.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151237.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151239.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151241.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151244.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209151245.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209231624.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209231625.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241209231626.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241210072248.mjs create mode 100644 .history/module/applications/sheets/miracle-sheet_20241210072251.mjs create mode 100644 .history/module/applications/sheets/shield-sheet_20241203125805.mjs create mode 100644 .history/module/applications/sheets/shield-sheet_20241210072243.mjs create mode 100644 .history/module/applications/sheets/spell-sheet_20241121235722.mjs create mode 100644 .history/module/applications/sheets/spell-sheet_20241210072209.mjs create mode 100644 .history/module/applications/sheets/spell-sheet_20241210072211.mjs create mode 100644 .history/module/applications/sheets/weapon-sheet_20241203131225.mjs create mode 100644 .history/module/applications/sheets/weapon-sheet_20241210071054.mjs create mode 100644 .history/module/applications/sheets/weapon-sheet_20241210072223.mjs create mode 100644 .history/module/applications/sheets/weapon-sheet_20241210072225.mjs create mode 100644 .history/module/applications/sheets/weapon-sheet_20241210072235.mjs create mode 100644 .history/module/config/character_20241207091147.mjs create mode 100644 .history/module/config/character_20241210075220.mjs create mode 100644 .history/module/config/character_20241210075222.mjs create mode 100644 .history/module/config/character_20241210075224.mjs create mode 100644 .history/module/config/character_20241210075228.mjs create mode 100644 .history/module/config/character_20241210075229.mjs create mode 100644 .history/module/config/character_20241210075231.mjs create mode 100644 .history/module/config/character_20241210075236.mjs create mode 100644 .history/module/config/character_20241210075238.mjs create mode 100644 .history/module/config/character_20241210075243.mjs create mode 100644 .history/module/config/character_20241210075254.mjs create mode 100644 .history/module/config/character_20241210075256.mjs create mode 100644 .history/module/config/character_20241210075300.mjs create mode 100644 .history/module/config/character_20241210075305.mjs create mode 100644 .history/module/config/character_20241210075306.mjs create mode 100644 .history/module/config/character_20241210075311.mjs create mode 100644 .history/module/config/character_20241210075313.mjs create mode 100644 .history/module/config/character_20241210075316.mjs create mode 100644 .history/module/config/character_20241210075321.mjs create mode 100644 .history/module/config/character_20241210075323.mjs create mode 100644 .history/module/config/character_20241210075331.mjs create mode 100644 .history/module/config/character_20241210075333.mjs create mode 100644 .history/module/config/character_20241210075336.mjs create mode 100644 .history/module/config/character_20241210075339.mjs create mode 100644 .history/module/config/character_20241210075341.mjs create mode 100644 .history/module/config/character_20241210075630.mjs create mode 100644 .history/module/config/character_20241210173254.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161354.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161403.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161404.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161410.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161416.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161418.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161422.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161426.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161427.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161447.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161448.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161450.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161451.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161452.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161501.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161535.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161544.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161557.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161607.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161620.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161629.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161643.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161653.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161701.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161708.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161721.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161722.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161731.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161811.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161812.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161821.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161822.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161827.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161835.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161841.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161852.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161854.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161902.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161913.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161929.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161955.mjs create mode 100644 .history/module/config/characteristic-tables_20241208161958.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162000.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162001.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162006.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162010.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162020.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162027.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162030.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162042.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162109.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162144.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162149.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162202.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162217.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162244.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162245.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162424.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162426.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162428.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162433.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162445.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162446.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162447.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162454.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162455.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162504.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162508.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162509.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162513.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162523.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162535.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162536.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162551.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162552.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162558.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162639.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162642.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162657.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162704.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162706.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162726.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162728.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162739.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162746.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162753.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162805.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162810.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162820.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162821.mjs create mode 100644 .history/module/config/characteristic-tables_20241208162835.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163012.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163217.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163335.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163337.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163646.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163647.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163651.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163706.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163712.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163717.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163719.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163722.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163728.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163730.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163733.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163735.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163737.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163738.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163740.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163742.mjs create mode 100644 .history/module/config/characteristic-tables_20241208163745.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204026.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204027.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204038.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204039.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204040.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204043.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204044.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204045.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204046.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204047.mjs create mode 100644 .history/module/config/characteristic-tables_20241208204048.mjs create mode 100644 .history/module/config/system_20241207230457.mjs create mode 100644 .history/module/config/system_20241208155651.mjs create mode 100644 .history/module/config/system_20241208155652.mjs create mode 100644 .history/module/config/system_20241208161331.mjs create mode 100644 .history/module/config/system_20241208161335.mjs create mode 100644 .history/module/config/system_20241208161336.mjs create mode 100644 .history/module/config/system_20241208161341.mjs create mode 100644 .history/module/config/system_20241208163232.mjs create mode 100644 .history/module/config/system_20241208163236.mjs create mode 100644 .history/module/config/system_20241208163237.mjs create mode 100644 .history/module/config/system_20241208163239.mjs create mode 100644 .history/module/config/system_20241208163243.mjs create mode 100644 .history/module/config/system_20241208163245.mjs create mode 100644 .history/module/config/system_20241208163247.mjs create mode 100644 .history/module/config/system_20241208163248.mjs create mode 100644 .history/module/config/system_20241208163253.mjs create mode 100644 .history/module/config/system_20241208163259.mjs create mode 100644 .history/module/config/system_20241208163300.mjs create mode 100644 .history/module/config/system_20241208163301.mjs create mode 100644 .history/module/config/system_20241208163304.mjs create mode 100644 .history/module/config/system_20241208163306.mjs create mode 100644 .history/module/config/system_20241208163314.mjs create mode 100644 .history/module/config/system_20241208163315.mjs create mode 100644 .history/module/config/system_20241208163322.mjs create mode 100644 .history/module/config/system_20241208163323.mjs create mode 100644 .history/module/config/system_20241208163324.mjs create mode 100644 .history/module/config/system_20241208163327.mjs create mode 100644 .history/module/config/system_20241208163328.mjs create mode 100644 .history/module/config/system_20241208163330.mjs create mode 100644 .history/module/config/system_20241208163331.mjs create mode 100644 .history/module/config/system_20241208163752.mjs create mode 100644 .history/module/config/system_20241208163755.mjs create mode 100644 .history/module/config/system_20241208163757.mjs create mode 100644 .history/module/config/system_20241208163758.mjs create mode 100644 .history/module/config/system_20241208163804.mjs create mode 100644 .history/module/config/system_20241208163805.mjs create mode 100644 .history/module/config/system_20241208163806.mjs create mode 100644 .history/module/config/system_20241208163807.mjs create mode 100644 .history/module/config/system_20241210075418.mjs create mode 100644 .history/module/config/system_20241210075422.mjs create mode 100644 .history/module/config/system_20241217070425.mjs create mode 100644 .history/module/config/system_20241217070432.mjs create mode 100644 .history/module/config/system_20241217070434.mjs create mode 100644 .history/module/config/weapon_20241207230317.mjs create mode 100644 .history/module/config/weapon_20241208155340.mjs create mode 100644 .history/module/config/weapon_20241208155343.mjs create mode 100644 .history/module/config/weapon_20241208155345.mjs create mode 100644 .history/module/config/weapon_20241208155348.mjs create mode 100644 .history/module/config/weapon_20241208155354.mjs create mode 100644 .history/module/config/weapon_20241208155356.mjs create mode 100644 .history/module/config/weapon_20241208155357.mjs create mode 100644 .history/module/config/weapon_20241208155358.mjs create mode 100644 .history/module/config/weapon_20241208155400.mjs create mode 100644 .history/module/config/weapon_20241208155414.mjs create mode 100644 .history/module/config/weapon_20241208155416.mjs create mode 100644 .history/module/config/weapon_20241208155418.mjs create mode 100644 .history/module/config/weapon_20241208155421.mjs create mode 100644 .history/module/config/weapon_20241208155431.mjs create mode 100644 .history/module/config/weapon_20241208155433.mjs create mode 100644 .history/module/config/weapon_20241208155438.mjs create mode 100644 .history/module/config/weapon_20241208155440.mjs create mode 100644 .history/module/config/weapon_20241208155441.mjs create mode 100644 .history/module/config/weapon_20241208155444.mjs create mode 100644 .history/module/config/weapon_20241208155447.mjs create mode 100644 .history/module/config/weapon_20241208155449.mjs create mode 100644 .history/module/config/weapon_20241208155453.mjs create mode 100644 .history/module/config/weapon_20241208155454.mjs create mode 100644 .history/module/config/weapon_20241208155502.mjs create mode 100644 .history/module/config/weapon_20241208155508.mjs create mode 100644 .history/module/config/weapon_20241208155510.mjs create mode 100644 .history/module/config/weapon_20241208155518.mjs create mode 100644 .history/module/config/weapon_20241208155520.mjs create mode 100644 .history/module/config/weapon_20241208155526.mjs create mode 100644 .history/module/config/weapon_20241208155528.mjs create mode 100644 .history/module/config/weapon_20241208155534.mjs create mode 100644 .history/module/config/weapon_20241208155536.mjs create mode 100644 .history/module/config/weapon_20241208155540.mjs create mode 100644 .history/module/config/weapon_20241208155549.mjs create mode 100644 .history/module/config/weapon_20241208155551.mjs create mode 100644 .history/module/config/weapon_20241208155557.mjs create mode 100644 .history/module/config/weapon_20241208155559.mjs create mode 100644 .history/module/config/weapon_20241208155608.mjs create mode 100644 .history/module/config/weapon_20241208155609.mjs create mode 100644 .history/module/config/weapon_20241208155610.mjs create mode 100644 .history/module/config/weapon_20241208155611.mjs create mode 100644 .history/module/config/weapon_20241208155612.mjs create mode 100644 .history/module/config/weapon_20241208155640.mjs create mode 100644 .history/module/config/weapon_20241208155641.mjs create mode 100644 .history/module/config/weapon_20241208155642.mjs create mode 100644 .history/module/config/weapon_20241217070347.mjs create mode 100644 .history/module/config/weapon_20241217070351.mjs create mode 100644 .history/module/config/weapon_20241217070352.mjs create mode 100644 .history/module/config/weapon_20241217070357.mjs create mode 100644 .history/module/config/weapon_20241217070400.mjs create mode 100644 .history/module/config/weapon_20241217070403.mjs create mode 100644 .history/module/config/weapon_20241217070406.mjs create mode 100644 .history/module/config/weapon_20241217070409.mjs create mode 100644 .history/module/config/weapon_20241217070412.mjs create mode 100644 .history/module/documents/item_20241206134814.mjs create mode 100644 .history/module/documents/item_20241209231729.mjs create mode 100644 .history/module/documents/item_20241209231731.mjs create mode 100644 .history/module/documents/item_20241209231733.mjs create mode 100644 .history/module/documents/item_20241209231735.mjs create mode 100644 .history/module/documents/item_20241209231739.mjs create mode 100644 .history/module/documents/item_20241209231740.mjs create mode 100644 .history/module/documents/item_20241209231806.mjs create mode 100644 .history/module/documents/item_20241217065944.mjs create mode 100644 .history/module/documents/item_20241217065947.mjs create mode 100644 .history/module/documents/item_20241217065948.mjs create mode 100644 .history/module/models/_module_20241201145936.mjs create mode 100644 .history/module/models/_module_20241209151101.mjs create mode 100644 .history/module/models/_module_20241209151102.mjs create mode 100644 .history/module/models/_module_20241210070822.mjs create mode 100644 .history/module/models/_module_20241210070823.mjs create mode 100644 .history/module/models/_module_20241210070825.mjs create mode 100644 .history/module/models/_module_20241210071429.mjs create mode 100644 .history/module/models/armor_20241130182142.mjs create mode 100644 .history/module/models/armor_20241210070624.mjs create mode 100644 .history/module/models/armor_20241210070625.mjs create mode 100644 .history/module/models/armor_20241210070627.mjs create mode 100644 .history/module/models/armor_20241210070631.mjs create mode 100644 .history/module/models/armor_20241210070634.mjs create mode 100644 .history/module/models/armor_20241210070636.mjs create mode 100644 .history/module/models/armor_20241210070637.mjs create mode 100644 .history/module/models/armor_20241210070918.mjs create mode 100644 .history/module/models/armor_20241210070920.mjs create mode 100644 .history/module/models/armor_20241210070923.mjs create mode 100644 .history/module/models/armor_20241210071003.mjs create mode 100644 .history/module/models/armor_20241210071028.mjs create mode 100644 .history/module/models/armor_20241210071210.mjs create mode 100644 .history/module/models/armor_20241210071213.mjs create mode 100644 .history/module/models/armor_20241210071217.mjs create mode 100644 .history/module/models/armor_20241210071218.mjs create mode 100644 .history/module/models/armor_20241210071602.mjs create mode 100644 .history/module/models/armor_20241210071604.mjs create mode 100644 .history/module/models/armor_20241210071830.mjs create mode 100644 .history/module/models/armor_20241210172351.mjs create mode 100644 .history/module/models/armor_20241210172354.mjs create mode 100644 .history/module/models/armor_20241210172355.mjs create mode 100644 .history/module/models/armor_20241210172356.mjs create mode 100644 .history/module/models/armor_20241210172411.mjs create mode 100644 .history/module/models/armor_20241210172415.mjs create mode 100644 .history/module/models/armor_20241210172421.mjs create mode 100644 .history/module/models/armor_20241210172422.mjs create mode 100644 .history/module/models/armor_20241210172439.mjs create mode 100644 .history/module/models/armor_20241210172441.mjs create mode 100644 .history/module/models/armor_20241210172442.mjs create mode 100644 .history/module/models/armor_20241210172443.mjs create mode 100644 .history/module/models/armor_20241210172447.mjs create mode 100644 .history/module/models/armor_20241210172449.mjs create mode 100644 .history/module/models/armor_20241210173329.mjs create mode 100644 .history/module/models/armor_20241210173332.mjs create mode 100644 .history/module/models/armor_20241210173333.mjs create mode 100644 .history/module/models/character_20241130072212.mjs create mode 100644 .history/module/models/character_20241208163852.mjs create mode 100644 .history/module/models/character_20241208163903.mjs create mode 100644 .history/module/models/character_20241208163907.mjs create mode 100644 .history/module/models/character_20241208163950.mjs create mode 100644 .history/module/models/character_20241208163954.mjs create mode 100644 .history/module/models/character_20241208164009.mjs create mode 100644 .history/module/models/character_20241208164014.mjs create mode 100644 .history/module/models/character_20241208164015.mjs create mode 100644 .history/module/models/character_20241208164017.mjs create mode 100644 .history/module/models/character_20241208164018.mjs create mode 100644 .history/module/models/character_20241208164021.mjs create mode 100644 .history/module/models/character_20241208164036.mjs create mode 100644 .history/module/models/character_20241208164043.mjs create mode 100644 .history/module/models/character_20241208164048.mjs create mode 100644 .history/module/models/character_20241208164054.mjs create mode 100644 .history/module/models/character_20241208164055.mjs create mode 100644 .history/module/models/character_20241208164101.mjs create mode 100644 .history/module/models/character_20241208164153.mjs create mode 100644 .history/module/models/character_20241208164154.mjs create mode 100644 .history/module/models/character_20241208164223.mjs create mode 100644 .history/module/models/character_20241208164226.mjs create mode 100644 .history/module/models/character_20241208164228.mjs create mode 100644 .history/module/models/character_20241208164233.mjs create mode 100644 .history/module/models/character_20241208164234.mjs create mode 100644 .history/module/models/character_20241208164237.mjs create mode 100644 .history/module/models/character_20241208164238.mjs create mode 100644 .history/module/models/character_20241208164239.mjs create mode 100644 .history/module/models/character_20241208164240.mjs create mode 100644 .history/module/models/character_20241208164241.mjs create mode 100644 .history/module/models/character_20241208164246.mjs create mode 100644 .history/module/models/character_20241208164252.mjs create mode 100644 .history/module/models/character_20241208164253.mjs create mode 100644 .history/module/models/character_20241208164256.mjs create mode 100644 .history/module/models/character_20241208164257.mjs create mode 100644 .history/module/models/character_20241208164300.mjs create mode 100644 .history/module/models/character_20241210075636.mjs create mode 100644 .history/module/models/character_20241210075643.mjs create mode 100644 .history/module/models/character_20241210075647.mjs create mode 100644 .history/module/models/character_20241210075650.mjs create mode 100644 .history/module/models/character_20241210075651.mjs create mode 100644 .history/module/models/character_20241210075659.mjs create mode 100644 .history/module/models/character_20241210075704.mjs create mode 100644 .history/module/models/character_20241210075708.mjs create mode 100644 .history/module/models/character_20241210075711.mjs create mode 100644 .history/module/models/character_20241210075712.mjs create mode 100644 .history/module/models/character_20241210075716.mjs create mode 100644 .history/module/models/character_20241210075717.mjs create mode 100644 .history/module/models/character_20241210075811.mjs create mode 100644 .history/module/models/character_20241210075815.mjs create mode 100644 .history/module/models/character_20241210075816.mjs create mode 100644 .history/module/models/character_20241210075819.mjs create mode 100644 .history/module/models/character_20241210075821.mjs create mode 100644 .history/module/models/character_20241210075822.mjs create mode 100644 .history/module/models/character_20241210075823.mjs create mode 100644 .history/module/models/character_20241210075824.mjs create mode 100644 .history/module/models/character_20241210075825.mjs create mode 100644 .history/module/models/character_20241210075832.mjs create mode 100644 .history/module/models/character_20241210075837.mjs create mode 100644 .history/module/models/character_20241210075917.mjs create mode 100644 .history/module/models/character_20241210075919.mjs create mode 100644 .history/module/models/character_20241210075920.mjs create mode 100644 .history/module/models/character_20241210080003.mjs create mode 100644 .history/module/models/character_20241210080005.mjs create mode 100644 .history/module/models/character_20241210080009.mjs create mode 100644 .history/module/models/character_20241210080010.mjs create mode 100644 .history/module/models/character_20241210080011.mjs create mode 100644 .history/module/models/character_20241210080012.mjs create mode 100644 .history/module/models/character_20241210080017.mjs create mode 100644 .history/module/models/character_20241210080018.mjs create mode 100644 .history/module/models/character_20241210080036.mjs create mode 100644 .history/module/models/character_20241210080039.mjs create mode 100644 .history/module/models/equipment_20241207222905.mjs create mode 100644 .history/module/models/equipment_20241210071226.mjs create mode 100644 .history/module/models/equipment_20241210071610.mjs create mode 100644 .history/module/models/equipment_20241210071839.mjs create mode 100644 .history/module/models/miracle_20241209150718.mjs create mode 100644 .history/module/models/miracle_20241209150719.mjs create mode 100644 .history/module/models/miracle_20241209150908.mjs create mode 100644 .history/module/models/miracle_20241209150921.mjs create mode 100644 .history/module/models/miracle_20241209150924.mjs create mode 100644 .history/module/models/miracle_20241209150927.mjs create mode 100644 .history/module/models/miracle_20241209150944.mjs create mode 100644 .history/module/models/miracle_20241209150946.mjs create mode 100644 .history/module/models/miracle_20241209150948.mjs create mode 100644 .history/module/models/miracle_20241209150951.mjs create mode 100644 .history/module/models/miracle_20241209150956.mjs create mode 100644 .history/module/models/miracle_20241209150957.mjs create mode 100644 .history/module/models/miracle_20241209151003.mjs create mode 100644 .history/module/models/miracle_20241209151005.mjs create mode 100644 .history/module/models/miracle_20241209151010.mjs create mode 100644 .history/module/models/miracle_20241209151013.mjs create mode 100644 .history/module/models/miracle_20241209151020.mjs create mode 100644 .history/module/models/miracle_20241209151035.mjs create mode 100644 .history/module/models/miracle_20241209151037.mjs create mode 100644 .history/module/models/miracle_20241209151038.mjs create mode 100644 .history/module/models/miracle_20241209151039.mjs create mode 100644 .history/module/models/miracle_20241209151040.mjs create mode 100644 .history/module/models/miracle_20241209151053.mjs create mode 100644 .history/module/models/miracle_20241209151055.mjs create mode 100644 .history/module/models/shield_20241130182151.mjs create mode 100644 .history/module/models/shield_20241210071245.mjs create mode 100644 .history/module/models/shield_20241210071615.mjs create mode 100644 .history/module/models/shield_20241210071844.mjs create mode 100644 .history/module/models/shield_20241210172434.mjs create mode 100644 .history/module/models/skill_20241207090310.mjs create mode 100644 .history/module/models/skill_20241208155713.mjs create mode 100644 .history/module/models/skill_20241208155715.mjs create mode 100644 .history/module/models/skill_20241208155716.mjs create mode 100644 .history/module/models/skill_20241208155717.mjs create mode 100644 .history/module/models/skill_20241208155726.mjs create mode 100644 .history/module/models/skill_20241208155727.mjs create mode 100644 .history/module/models/skill_20241208155728.mjs create mode 100644 .history/module/models/skill_20241208171006.mjs create mode 100644 .history/module/models/skill_20241208171010.mjs create mode 100644 .history/module/models/skill_20241208171013.mjs create mode 100644 .history/module/models/skill_20241208171015.mjs create mode 100644 .history/module/models/skill_20241208171017.mjs create mode 100644 .history/module/models/skill_20241208171022.mjs create mode 100644 .history/module/models/skill_20241208171023.mjs create mode 100644 .history/module/models/skill_20241208171031.mjs create mode 100644 .history/module/models/skill_20241208171033.mjs create mode 100644 .history/module/models/skill_20241208171035.mjs create mode 100644 .history/module/models/skill_20241208171038.mjs create mode 100644 .history/module/models/skill_20241208171051.mjs create mode 100644 .history/module/models/skill_20241208171055.mjs create mode 100644 .history/module/models/skill_20241208171059.mjs create mode 100644 .history/module/models/skill_20241208171102.mjs create mode 100644 .history/module/models/skill_20241208171105.mjs create mode 100644 .history/module/models/skill_20241208171106.mjs create mode 100644 .history/module/models/skill_20241208171107.mjs create mode 100644 .history/module/models/skill_20241208171108.mjs create mode 100644 .history/module/models/skill_20241208171110.mjs create mode 100644 .history/module/models/skill_20241208171115.mjs create mode 100644 .history/module/models/skill_20241208171116.mjs create mode 100644 .history/module/models/skill_20241208171117.mjs create mode 100644 .history/module/models/skill_20241208171118.mjs create mode 100644 .history/module/models/skill_20241208171121.mjs create mode 100644 .history/module/models/skill_20241208171122.mjs create mode 100644 .history/module/models/skill_20241208201835.mjs create mode 100644 .history/module/models/skill_20241208201841.mjs create mode 100644 .history/module/models/skill_20241208201844.mjs create mode 100644 .history/module/models/skill_20241208201845.mjs create mode 100644 .history/module/models/skill_20241208201847.mjs create mode 100644 .history/module/models/skill_20241208201848.mjs create mode 100644 .history/module/models/skill_20241208201853.mjs create mode 100644 .history/module/models/skill_20241208201856.mjs create mode 100644 .history/module/models/skill_20241208201859.mjs create mode 100644 .history/module/models/skill_20241208201912.mjs create mode 100644 .history/module/models/skill_20241208201914.mjs create mode 100644 .history/module/models/skill_20241208201916.mjs create mode 100644 .history/module/models/skill_20241208201917.mjs create mode 100644 .history/module/models/skill_20241208201919.mjs create mode 100644 .history/module/models/skill_20241208201929.mjs create mode 100644 .history/module/models/skill_20241208201933.mjs create mode 100644 .history/module/models/skill_20241208201950.mjs create mode 100644 .history/module/models/skill_20241208201953.mjs create mode 100644 .history/module/models/skill_20241208201959.mjs create mode 100644 .history/module/models/skill_20241208202001.mjs create mode 100644 .history/module/models/skill_20241208202002.mjs create mode 100644 .history/module/models/skill_20241208202009.mjs create mode 100644 .history/module/models/skill_20241208202010.mjs create mode 100644 .history/module/models/skill_20241208202011.mjs create mode 100644 .history/module/models/skill_20241208202013.mjs create mode 100644 .history/module/models/skill_20241208202014.mjs create mode 100644 .history/module/models/skill_20241208202017.mjs create mode 100644 .history/module/models/skill_20241208202018.mjs create mode 100644 .history/module/models/skill_20241208204413.mjs create mode 100644 .history/module/models/skill_20241208204416.mjs create mode 100644 .history/module/models/skill_20241208204422.mjs create mode 100644 .history/module/models/skill_20241208204426.mjs create mode 100644 .history/module/models/skill_20241208204428.mjs create mode 100644 .history/module/models/skill_20241208204429.mjs create mode 100644 .history/module/models/skill_20241208204530.mjs create mode 100644 .history/module/models/skill_20241208204648.mjs create mode 100644 .history/module/models/skill_20241208204651.mjs create mode 100644 .history/module/models/skill_20241208204652.mjs create mode 100644 .history/module/models/skill_20241208204659.mjs create mode 100644 .history/module/models/skill_20241208204754.mjs create mode 100644 .history/module/models/skill_20241208204926.mjs create mode 100644 .history/module/models/skill_20241208204929.mjs create mode 100644 .history/module/models/skill_20241208204931.mjs create mode 100644 .history/module/models/skill_20241208204936.mjs create mode 100644 .history/module/models/skill_20241208204937.mjs create mode 100644 .history/module/models/skill_20241208204940.mjs create mode 100644 .history/module/models/skill_20241208204941.mjs create mode 100644 .history/module/models/skill_20241208204944.mjs create mode 100644 .history/module/models/skill_20241208204948.mjs create mode 100644 .history/module/models/skill_20241208204949.mjs create mode 100644 .history/module/models/skill_20241208204950.mjs create mode 100644 .history/module/models/skill_20241208204956.mjs create mode 100644 .history/module/models/skill_20241208204957.mjs create mode 100644 .history/module/models/skill_20241208205030.mjs create mode 100644 .history/module/models/skill_20241208205040.mjs create mode 100644 .history/module/models/skill_20241208205053.mjs create mode 100644 .history/module/models/skill_20241208205057.mjs create mode 100644 .history/module/models/skill_20241208205112.mjs create mode 100644 .history/module/models/skill_20241208205114.mjs create mode 100644 .history/module/models/skill_20241208205115.mjs create mode 100644 .history/module/models/skill_20241208205116.mjs create mode 100644 .history/module/models/skill_20241208205119.mjs create mode 100644 .history/module/models/skill_20241208205127.mjs create mode 100644 .history/module/models/skill_20241208205129.mjs create mode 100644 .history/module/models/skill_20241208205137.mjs create mode 100644 .history/module/models/skill_20241208205142.mjs create mode 100644 .history/module/models/skill_20241208205143.mjs create mode 100644 .history/module/models/skill_20241208205145.mjs create mode 100644 .history/module/models/skill_20241208205151.mjs create mode 100644 .history/module/models/skill_20241208205152.mjs create mode 100644 .history/module/models/skill_20241208205153.mjs create mode 100644 .history/module/models/skill_20241208205157.mjs create mode 100644 .history/module/models/skill_20241208205158.mjs create mode 100644 .history/module/models/skill_20241208205202.mjs create mode 100644 .history/module/models/skill_20241208205205.mjs create mode 100644 .history/module/models/skill_20241208205206.mjs create mode 100644 .history/module/models/skill_20241208205207.mjs create mode 100644 .history/module/models/skill_20241208205208.mjs create mode 100644 .history/module/models/skill_20241208205209.mjs create mode 100644 .history/module/models/skill_20241208205248.mjs create mode 100644 .history/module/models/skill_20241208205250.mjs create mode 100644 .history/module/models/skill_20241208205251.mjs create mode 100644 .history/module/models/skill_20241208205406.mjs create mode 100644 .history/module/models/skill_20241208205432.mjs create mode 100644 .history/module/models/skill_20241208205435.mjs create mode 100644 .history/module/models/skill_20241208205436.mjs create mode 100644 .history/module/models/skill_20241208205439.mjs create mode 100644 .history/module/models/skill_20241208205528.mjs create mode 100644 .history/module/models/skill_20241208205532.mjs create mode 100644 .history/module/models/skill_20241208205534.mjs create mode 100644 .history/module/models/skill_20241208205536.mjs create mode 100644 .history/module/models/skill_20241208205602.mjs create mode 100644 .history/module/models/skill_20241208205604.mjs create mode 100644 .history/module/models/skill_20241208205658.mjs create mode 100644 .history/module/models/skill_20241208205659.mjs create mode 100644 .history/module/models/skill_20241208205730.mjs create mode 100644 .history/module/models/skill_20241208205731.mjs create mode 100644 .history/module/models/skill_20241208205733.mjs create mode 100644 .history/module/models/skill_20241208205737.mjs create mode 100644 .history/module/models/skill_20241208205857.mjs create mode 100644 .history/module/models/skill_20241208205858.mjs create mode 100644 .history/module/models/skill_20241208205859.mjs create mode 100644 .history/module/models/skill_20241208205900.mjs create mode 100644 .history/module/models/skill_20241208205922.mjs create mode 100644 .history/module/models/skill_20241208205923.mjs create mode 100644 .history/module/models/skill_20241208205928.mjs create mode 100644 .history/module/models/skill_20241208205930.mjs create mode 100644 .history/module/models/skill_20241208205932.mjs create mode 100644 .history/module/models/skill_20241208205933.mjs create mode 100644 .history/module/models/skill_20241208205934.mjs create mode 100644 .history/module/models/skill_20241208205958.mjs create mode 100644 .history/module/models/skill_20241208205959.mjs create mode 100644 .history/module/models/skill_20241208210010.mjs create mode 100644 .history/module/models/skill_20241208210014.mjs create mode 100644 .history/module/models/skill_20241208210016.mjs create mode 100644 .history/module/models/skill_20241208210017.mjs create mode 100644 .history/module/models/skill_20241208210059.mjs create mode 100644 .history/module/models/skill_20241208210107.mjs create mode 100644 .history/module/models/skill_20241208210108.mjs create mode 100644 .history/module/models/skill_20241208210109.mjs create mode 100644 .history/module/models/skill_20241208210110.mjs create mode 100644 .history/module/models/skill_20241208210111.mjs create mode 100644 .history/module/models/skill_20241208210112.mjs create mode 100644 .history/module/models/skill_20241208210113.mjs create mode 100644 .history/module/models/skill_20241208210128.mjs create mode 100644 .history/module/models/skill_20241208210132.mjs create mode 100644 .history/module/models/skill_20241208210133.mjs create mode 100644 .history/module/models/vulnerability_20241130073315.mjs create mode 100644 .history/module/models/vulnerability_20241217070643.mjs create mode 100644 .history/module/models/vulnerability_20241217070645.mjs create mode 100644 .history/module/models/vulnerability_20241217070647.mjs create mode 100644 .history/module/models/vulnerability_20241217070658.mjs create mode 100644 .history/module/models/vulnerability_20241217070659.mjs create mode 100644 .history/module/models/vulnerability_20241217070702.mjs create mode 100644 .history/module/models/weapon_20241207222848.mjs create mode 100644 .history/module/models/weapon_20241208155859.mjs create mode 100644 .history/module/models/weapon_20241208155901.mjs create mode 100644 .history/module/models/weapon_20241208155902.mjs create mode 100644 .history/module/models/weapon_20241210071237.mjs create mode 100644 .history/module/models/weapon_20241210071617.mjs create mode 100644 .history/module/models/weapon_20241210071618.mjs create mode 100644 .history/module/models/weapon_20241210071850.mjs create mode 100644 .history/module/models/weapon_20241210172431.mjs create mode 100644 .history/module/models/weapon_20241217070154.mjs create mode 100644 .history/module/models/weapon_20241217070159.mjs create mode 100644 .history/module/models/weapon_20241217070201.mjs create mode 100644 .history/module/models/weapon_20241217070204.mjs create mode 100644 .history/module/models/weapon_20241217070205.mjs create mode 100644 .history/module/models/weapon_20241217070211.mjs create mode 100644 .history/module/models/weapon_20241217070212.mjs create mode 100644 .history/module/models/weapon_20241217070242.mjs create mode 100644 .history/module/models/weapon_20241217070248.mjs create mode 100644 .history/module/models/weapon_20241217070250.mjs create mode 100644 .history/module/models/weapon_20241217070253.mjs create mode 100644 .history/module/models/weapon_20241217070501.mjs create mode 100644 .history/module/models/weapon_20241217070505.mjs create mode 100644 .history/module/models/weapon_20241217070506.mjs create mode 100644 .history/module/models/weapon_20241217070510.mjs create mode 100644 .history/module/models/weapon_20241217070511.mjs create mode 100644 .history/module/models/weapon_20241217070512.mjs create mode 100644 .history/module/utils_20241121235547.mjs create mode 100644 .history/module/utils_20241208203936.mjs create mode 100644 .history/module/utils_20241208203937.mjs create mode 100644 .history/module/utils_20241208203944.mjs create mode 100644 .history/module/utils_20241208203945.mjs create mode 100644 .history/module/utils_20241208204002.mjs create mode 100644 .history/module/utils_20241208204004.mjs create mode 100644 .history/styles/character_20241207085600.less create mode 100644 .history/styles/character_20241210211946.less create mode 100644 .history/styles/character_20241210211954.less create mode 100644 .history/styles/character_20241210211958.less create mode 100644 .history/styles/character_20241210212000.less create mode 100644 .history/styles/character_20241210212010.less create mode 100644 .history/styles/character_20241210212016.less create mode 100644 .history/styles/character_20241210212032.less create mode 100644 .history/styles/character_20241210212039.less create mode 100644 .history/styles/character_20241210212134.less create mode 100644 .history/styles/character_20241210212135.less create mode 100644 .history/styles/character_20241210212141.less create mode 100644 .history/styles/character_20241210212147.less create mode 100644 .history/styles/character_20241210212150.less create mode 100644 .history/styles/character_20241210212352.less create mode 100644 .history/styles/character_20241210212356.less create mode 100644 .history/styles/character_20241210212357.less create mode 100644 .history/styles/character_20241210212358.less create mode 100644 .history/styles/character_20241210212401.less create mode 100644 .history/styles/character_20241210212412.less create mode 100644 .history/styles/character_20241210212419.less create mode 100644 .history/styles/character_20241210212429.less create mode 100644 .history/styles/character_20241210212431.less create mode 100644 .history/styles/character_20241210212432.less create mode 100644 .history/styles/character_20241210212435.less create mode 100644 .history/styles/character_20241210212437.less create mode 100644 .history/styles/character_20241210212439.less create mode 100644 .history/styles/character_20241210212447.less create mode 100644 .history/styles/character_20241210212618.less create mode 100644 .history/styles/character_20241210212619.less create mode 100644 .history/styles/character_20241210212656.less create mode 100644 .history/styles/character_20241210225459.less create mode 100644 .history/styles/character_20241210225503.less create mode 100644 .history/styles/character_20241210225508.less create mode 100644 .history/styles/character_20241210231314.less create mode 100644 .history/styles/character_20241210231320.less create mode 100644 .history/styles/character_20241210231323.less create mode 100644 .history/styles/character_20241210231521.less create mode 100644 .history/styles/character_20241210231528.less create mode 100644 .history/styles/character_20241210231535.less create mode 100644 .history/styles/character_20241210231540.less create mode 100644 .history/styles/fvtt-lethal-fantasy_20241201145505.less create mode 100644 .history/styles/fvtt-lethal-fantasy_20241209151130.less create mode 100644 .history/styles/fvtt-lethal-fantasy_20241209151132.less create mode 100644 .history/styles/fvtt-lethal-fantasy_20241209151134.less create mode 100644 .history/styles/fvtt-lethal-fantasy_20241210071307.less create mode 100644 .history/styles/miracle_20241209151116.less create mode 100644 .history/styles/miracle_20241209151119.less create mode 100644 .history/styles/miracle_20241209151121.less create mode 100644 .history/styles/miracle_20241209151123.less create mode 100644 .history/styles/miracle_20241209151125.less create mode 100644 .history/system_20241207223959.json create mode 100644 .history/system_20241209231426.json create mode 100644 .history/system_20241209231428.json create mode 100644 .history/system_20241209231431.json create mode 100644 .history/system_20241209231432.json create mode 100644 .history/system_20241210070129.json create mode 100644 .history/system_20241210071346.json create mode 100644 .history/system_20241210174329.json create mode 100644 .history/system_20241210231017.json create mode 100644 .history/system_20241217070806.json create mode 100644 .history/templates/armor_20241201145025.hbs create mode 100644 .history/templates/armor_20241210070528.hbs create mode 100644 .history/templates/armor_20241210070529.hbs create mode 100644 .history/templates/armor_20241210070530.hbs create mode 100644 .history/templates/armor_20241210070533.hbs create mode 100644 .history/templates/armor_20241210070534.hbs create mode 100644 .history/templates/armor_20241210070701.hbs create mode 100644 .history/templates/armor_20241210070736.hbs create mode 100644 .history/templates/armor_20241210070751.hbs create mode 100644 .history/templates/armor_20241210070755.hbs create mode 100644 .history/templates/armor_20241210070818.hbs create mode 100644 .history/templates/armor_20241210070952.hbs create mode 100644 .history/templates/armor_20241210070955.hbs create mode 100644 .history/templates/armor_20241210071015.hbs create mode 100644 .history/templates/armor_20241210071020.hbs create mode 100644 .history/templates/armor_20241210071023.hbs create mode 100644 .history/templates/armor_20241210071034.hbs create mode 100644 .history/templates/armor_20241210071035.hbs create mode 100644 .history/templates/armor_20241210071641.hbs create mode 100644 .history/templates/armor_20241210071642.hbs create mode 100644 .history/templates/armor_20241210071758.hbs create mode 100644 .history/templates/armor_20241210072317.hbs create mode 100644 .history/templates/armor_20241210072318.hbs create mode 100644 .history/templates/armor_20241210172459.hbs create mode 100644 .history/templates/armor_20241210172503.hbs create mode 100644 .history/templates/armor_20241210172506.hbs create mode 100644 .history/templates/armor_20241210172508.hbs create mode 100644 .history/templates/armor_20241210172510.hbs create mode 100644 .history/templates/armor_20241210172514.hbs create mode 100644 .history/templates/armor_20241210172515.hbs create mode 100644 .history/templates/armor_20241210173347.hbs create mode 100644 .history/templates/armor_20241210173505.hbs create mode 100644 .history/templates/armor_20241210173931.hbs create mode 100644 .history/templates/armor_20241210173933.hbs create mode 100644 .history/templates/character-biography_20241207082848.hbs create mode 100644 .history/templates/character-biography_20241208154119.hbs create mode 100644 .history/templates/character-main_20241207223924.hbs create mode 100644 .history/templates/character-main_20241210205056.hbs create mode 100644 .history/templates/character-main_20241210205104.hbs create mode 100644 .history/templates/character-main_20241210205109.hbs create mode 100644 .history/templates/character-main_20241210205110.hbs create mode 100644 .history/templates/character-main_20241210205150.hbs create mode 100644 .history/templates/character-main_20241210205152.hbs create mode 100644 .history/templates/character-main_20241210205157.hbs create mode 100644 .history/templates/character-main_20241210205202.hbs create mode 100644 .history/templates/character-main_20241210205230.hbs create mode 100644 .history/templates/character-main_20241210205232.hbs create mode 100644 .history/templates/character-main_20241210205233.hbs create mode 100644 .history/templates/character-main_20241210205235.hbs create mode 100644 .history/templates/character-main_20241210205236.hbs create mode 100644 .history/templates/character-main_20241210205244.hbs create mode 100644 .history/templates/character-main_20241210205245.hbs create mode 100644 .history/templates/character-main_20241210205246.hbs create mode 100644 .history/templates/character-main_20241210205247.hbs create mode 100644 .history/templates/character-main_20241210205249.hbs create mode 100644 .history/templates/character-main_20241210205250.hbs create mode 100644 .history/templates/character-main_20241210205251.hbs create mode 100644 .history/templates/character-main_20241210205444.hbs create mode 100644 .history/templates/character-main_20241210211349.hbs create mode 100644 .history/templates/character-main_20241210211350.hbs create mode 100644 .history/templates/character-main_20241210211351.hbs create mode 100644 .history/templates/character-main_20241210211354.hbs create mode 100644 .history/templates/character-main_20241210211355.hbs create mode 100644 .history/templates/character-main_20241210211356.hbs create mode 100644 .history/templates/character-main_20241210211404.hbs create mode 100644 .history/templates/character-main_20241210211405.hbs create mode 100644 .history/templates/character-main_20241210211409.hbs create mode 100644 .history/templates/character-main_20241210211424.hbs create mode 100644 .history/templates/character-main_20241210211426.hbs create mode 100644 .history/templates/character-main_20241210211427.hbs create mode 100644 .history/templates/character-main_20241210211429.hbs create mode 100644 .history/templates/character-main_20241210211456.hbs create mode 100644 .history/templates/character-main_20241210211513.hbs create mode 100644 .history/templates/character-main_20241210211515.hbs create mode 100644 .history/templates/character-main_20241210211524.hbs create mode 100644 .history/templates/character-main_20241210211538.hbs create mode 100644 .history/templates/character-main_20241210211540.hbs create mode 100644 .history/templates/character-main_20241210211542.hbs create mode 100644 .history/templates/character-main_20241210211546.hbs create mode 100644 .history/templates/character-main_20241210211556.hbs create mode 100644 .history/templates/character-main_20241210211559.hbs create mode 100644 .history/templates/character-main_20241210211612.hbs create mode 100644 .history/templates/character-main_20241210211614.hbs create mode 100644 .history/templates/character-main_20241210211618.hbs create mode 100644 .history/templates/character-main_20241210211620.hbs create mode 100644 .history/templates/character-main_20241210211628.hbs create mode 100644 .history/templates/character-main_20241210211629.hbs create mode 100644 .history/templates/character-main_20241210211630.hbs create mode 100644 .history/templates/character-main_20241210211631.hbs create mode 100644 .history/templates/character-main_20241210211639.hbs create mode 100644 .history/templates/character-main_20241210211640.hbs create mode 100644 .history/templates/character-main_20241210211641.hbs create mode 100644 .history/templates/character-main_20241210211642.hbs create mode 100644 .history/templates/character-main_20241210211723.hbs create mode 100644 .history/templates/character-main_20241210211726.hbs create mode 100644 .history/templates/character-main_20241210211727.hbs create mode 100644 .history/templates/character-main_20241210211732.hbs create mode 100644 .history/templates/character-main_20241210211733.hbs create mode 100644 .history/templates/character-main_20241210211734.hbs create mode 100644 .history/templates/character-main_20241210211746.hbs create mode 100644 .history/templates/character-main_20241210211837.hbs create mode 100644 .history/templates/character-main_20241210211838.hbs create mode 100644 .history/templates/character-main_20241210211847.hbs create mode 100644 .history/templates/character-main_20241210211856.hbs create mode 100644 .history/templates/character-main_20241210212330.hbs create mode 100644 .history/templates/character-main_20241210212332.hbs create mode 100644 .history/templates/character-main_20241210212335.hbs create mode 100644 .history/templates/character-main_20241210212338.hbs create mode 100644 .history/templates/character-main_20241210212340.hbs create mode 100644 .history/templates/character-main_20241210212511.hbs create mode 100644 .history/templates/character-main_20241210212515.hbs create mode 100644 .history/templates/character-main_20241210212531.hbs create mode 100644 .history/templates/character-main_20241210212533.hbs create mode 100644 .history/templates/character-main_20241210212541.hbs create mode 100644 .history/templates/character-main_20241210212543.hbs create mode 100644 .history/templates/character-main_20241210212548.hbs create mode 100644 .history/templates/character-main_20241210212551.hbs create mode 100644 .history/templates/character-main_20241210212552.hbs create mode 100644 .history/templates/character-main_20241210212554.hbs create mode 100644 .history/templates/character-main_20241210212556.hbs create mode 100644 .history/templates/character-main_20241210212559.hbs create mode 100644 .history/templates/character-main_20241210212723.hbs create mode 100644 .history/templates/character-main_20241210212728.hbs create mode 100644 .history/templates/character-main_20241210212732.hbs create mode 100644 .history/templates/character-main_20241210212734.hbs create mode 100644 .history/templates/character-main_20241210212738.hbs create mode 100644 .history/templates/character-main_20241210212741.hbs create mode 100644 .history/templates/character-main_20241210212754.hbs create mode 100644 .history/templates/character-main_20241210212755.hbs create mode 100644 .history/templates/character-main_20241210212758.hbs create mode 100644 .history/templates/character-main_20241210212805.hbs create mode 100644 .history/templates/character-main_20241210212809.hbs create mode 100644 .history/templates/character-main_20241210212815.hbs create mode 100644 .history/templates/character-main_20241210212819.hbs create mode 100644 .history/templates/character-main_20241210212821.hbs create mode 100644 .history/templates/character-main_20241210212824.hbs create mode 100644 .history/templates/character-main_20241210212826.hbs create mode 100644 .history/templates/character-main_20241210212828.hbs create mode 100644 .history/templates/character-main_20241210212829.hbs create mode 100644 .history/templates/character-main_20241210212832.hbs create mode 100644 .history/templates/character-main_20241210212835.hbs create mode 100644 .history/templates/character-main_20241210212844.hbs create mode 100644 .history/templates/character-main_20241210212846.hbs create mode 100644 .history/templates/character-main_20241210212847.hbs create mode 100644 .history/templates/character-main_20241210212850.hbs create mode 100644 .history/templates/character-main_20241210212851.hbs create mode 100644 .history/templates/character-main_20241210212852.hbs create mode 100644 .history/templates/character-main_20241210212853.hbs create mode 100644 .history/templates/character-main_20241210212854.hbs create mode 100644 .history/templates/character-main_20241210212855.hbs create mode 100644 .history/templates/character-main_20241210212926.hbs create mode 100644 .history/templates/character-main_20241210212948.hbs create mode 100644 .history/templates/character-main_20241210212949.hbs create mode 100644 .history/templates/character-main_20241210212950.hbs create mode 100644 .history/templates/character-main_20241210212951.hbs create mode 100644 .history/templates/character-main_20241210225237.hbs create mode 100644 .history/templates/character-main_20241210225301.hbs create mode 100644 .history/templates/character-main_20241210225313.hbs create mode 100644 .history/templates/character-main_20241210225445.hbs create mode 100644 .history/templates/character-main_20241210225513.hbs create mode 100644 .history/templates/character-main_20241210225626.hbs create mode 100644 .history/templates/character-main_20241210225631.hbs create mode 100644 .history/templates/character-main_20241210225633.hbs create mode 100644 .history/templates/character-main_20241210225635.hbs create mode 100644 .history/templates/character-main_20241210225639.hbs create mode 100644 .history/templates/character-main_20241210225642.hbs create mode 100644 .history/templates/character-main_20241210225643.hbs create mode 100644 .history/templates/character-main_20241210225700.hbs create mode 100644 .history/templates/character-main_20241210225725.hbs create mode 100644 .history/templates/character-main_20241210225728.hbs create mode 100644 .history/templates/character-main_20241210225730.hbs create mode 100644 .history/templates/character-main_20241210225939.hbs create mode 100644 .history/templates/character-main_20241210225941.hbs create mode 100644 .history/templates/character-main_20241210225942.hbs create mode 100644 .history/templates/character-main_20241210225944.hbs create mode 100644 .history/templates/character-main_20241210225947.hbs create mode 100644 .history/templates/character-main_20241210225948.hbs create mode 100644 .history/templates/character-main_20241210225951.hbs create mode 100644 .history/templates/character-main_20241210230000.hbs create mode 100644 .history/templates/character-main_20241210230003.hbs create mode 100644 .history/templates/character-main_20241210230004.hbs create mode 100644 .history/templates/character-main_20241210230047.hbs create mode 100644 .history/templates/character-main_20241210230052.hbs create mode 100644 .history/templates/character-main_20241210230055.hbs create mode 100644 .history/templates/character-main_20241210230059.hbs create mode 100644 .history/templates/character-main_20241210230104.hbs create mode 100644 .history/templates/character-main_20241210230108.hbs create mode 100644 .history/templates/character-main_20241210230109.hbs create mode 100644 .history/templates/character-main_20241210230114.hbs create mode 100644 .history/templates/character-main_20241210230117.hbs create mode 100644 .history/templates/character-main_20241210230118.hbs create mode 100644 .history/templates/character-main_20241210230119.hbs create mode 100644 .history/templates/character-main_20241210230132.hbs create mode 100644 .history/templates/character-main_20241210230150.hbs create mode 100644 .history/templates/character-main_20241210230151.hbs create mode 100644 .history/templates/character-main_20241210230206.hbs create mode 100644 .history/templates/character-main_20241210230207.hbs create mode 100644 .history/templates/character-main_20241210230208.hbs create mode 100644 .history/templates/character-main_20241210230209.hbs create mode 100644 .history/templates/character-main_20241210230217.hbs create mode 100644 .history/templates/character-main_20241210230424.hbs create mode 100644 .history/templates/character-main_20241210230427.hbs create mode 100644 .history/templates/character-main_20241210230442.hbs create mode 100644 .history/templates/character-main_20241210230447.hbs create mode 100644 .history/templates/character-main_20241210230450.hbs create mode 100644 .history/templates/character-main_20241210230452.hbs create mode 100644 .history/templates/character-main_20241210230453.hbs create mode 100644 .history/templates/character-main_20241210230535.hbs create mode 100644 .history/templates/character-main_20241210230539.hbs create mode 100644 .history/templates/character-main_20241210230605.hbs create mode 100644 .history/templates/character-main_20241210230613.hbs create mode 100644 .history/templates/character-main_20241210230616.hbs create mode 100644 .history/templates/character-main_20241210230618.hbs create mode 100644 .history/templates/character-main_20241210230622.hbs create mode 100644 .history/templates/character-main_20241210230632.hbs create mode 100644 .history/templates/character-main_20241210230637.hbs create mode 100644 .history/templates/character-main_20241210230640.hbs create mode 100644 .history/templates/character-main_20241210230645.hbs create mode 100644 .history/templates/character-main_20241210230647.hbs create mode 100644 .history/templates/character-main_20241210230651.hbs create mode 100644 .history/templates/character-main_20241210230652.hbs create mode 100644 .history/templates/character-main_20241210230655.hbs create mode 100644 .history/templates/character-main_20241210230656.hbs create mode 100644 .history/templates/character-main_20241210230712.hbs create mode 100644 .history/templates/character-main_20241210230713.hbs create mode 100644 .history/templates/character-main_20241210230715.hbs create mode 100644 .history/templates/character-main_20241210230722.hbs create mode 100644 .history/templates/character-main_20241210230812.hbs create mode 100644 .history/templates/character-main_20241210230817.hbs create mode 100644 .history/templates/character-main_20241210230821.hbs create mode 100644 .history/templates/character-main_20241210230827.hbs create mode 100644 .history/templates/character-main_20241210230830.hbs create mode 100644 .history/templates/character-main_20241210231056.hbs create mode 100644 .history/templates/character-main_20241210231101.hbs create mode 100644 .history/templates/character-main_20241210231106.hbs create mode 100644 .history/templates/character-main_20241210231109.hbs create mode 100644 .history/templates/character-main_20241210231125.hbs create mode 100644 .history/templates/character-main_20241210231127.hbs create mode 100644 .history/templates/character-main_20241210231132.hbs create mode 100644 .history/templates/character-main_20241210231135.hbs create mode 100644 .history/templates/character-main_20241210231139.hbs create mode 100644 .history/templates/character-main_20241210231143.hbs create mode 100644 .history/templates/character-main_20241210231144.hbs create mode 100644 .history/templates/character-main_20241210231151.hbs create mode 100644 .history/templates/character-main_20241210231203.hbs create mode 100644 .history/templates/character-main_20241210231208.hbs create mode 100644 .history/templates/character-main_20241210231209.hbs create mode 100644 .history/templates/character-main_20241210231219.hbs create mode 100644 .history/templates/character-main_20241210231222.hbs create mode 100644 .history/templates/character-main_20241210231223.hbs create mode 100644 .history/templates/character-main_20241210231225.hbs create mode 100644 .history/templates/character-main_20241210231233.hbs create mode 100644 .history/templates/character-main_20241210231235.hbs create mode 100644 .history/templates/character-main_20241210231240.hbs create mode 100644 .history/templates/character-main_20241210231243.hbs create mode 100644 .history/templates/character-main_20241210231245.hbs create mode 100644 .history/templates/character-main_20241210231246.hbs create mode 100644 .history/templates/character-main_20241210231253.hbs create mode 100644 .history/templates/character-main_20241210231257.hbs create mode 100644 .history/templates/character-main_20241210231300.hbs create mode 100644 .history/templates/character-main_20241210231301.hbs create mode 100644 .history/templates/character-main_20241210231415.hbs create mode 100644 .history/templates/character-main_20241210231418.hbs create mode 100644 .history/templates/character-main_20241210231422.hbs create mode 100644 .history/templates/character-main_20241210231428.hbs create mode 100644 .history/templates/character-main_20241210231441.hbs create mode 100644 .history/templates/character-main_20241210231442.hbs create mode 100644 .history/templates/character-spells_20241207085616.hbs create mode 100644 .history/templates/character-spells_20241208154207.hbs create mode 100644 .history/templates/character-spells_20241208154208.hbs create mode 100644 .history/templates/character-spells_20241208154211.hbs create mode 100644 .history/templates/character-weapons_20241207085046.hbs create mode 100644 .history/templates/character-weapons_20241208154137.hbs create mode 100644 .history/templates/character-weapons_20241208154150.hbs create mode 100644 .history/templates/equipment_20241130174329.hbs create mode 100644 .history/templates/equipment_20241210071700.hbs create mode 100644 .history/templates/equipment_20241210071704.hbs create mode 100644 .history/templates/equipment_20241210071707.hbs create mode 100644 .history/templates/equipment_20241210072328.hbs create mode 100644 .history/templates/miracle_20241209151331.hbs create mode 100644 .history/templates/miracle_20241209151334.hbs create mode 100644 .history/templates/miracle_20241209151340.hbs create mode 100644 .history/templates/miracle_20241209151341.hbs create mode 100644 .history/templates/miracle_20241209151342.hbs create mode 100644 .history/templates/miracle_20241209151345.hbs create mode 100644 .history/templates/miracle_20241209151351.hbs create mode 100644 .history/templates/miracle_20241209151352.hbs create mode 100644 .history/templates/miracle_20241209151353.hbs create mode 100644 .history/templates/miracle_20241209151358.hbs create mode 100644 .history/templates/miracle_20241209151359.hbs create mode 100644 .history/templates/miracle_20241209151405.hbs create mode 100644 .history/templates/miracle_20241209151406.hbs create mode 100644 .history/templates/miracle_20241209151410.hbs create mode 100644 .history/templates/miracle_20241209151411.hbs create mode 100644 .history/templates/miracle_20241209151413.hbs create mode 100644 .history/templates/miracle_20241209151414.hbs create mode 100644 .history/templates/miracle_20241209151416.hbs create mode 100644 .history/templates/miracle_20241209231609.hbs create mode 100644 .history/templates/miracle_20241209231704.hbs create mode 100644 .history/templates/miracle_20241209231709.hbs create mode 100644 .history/templates/miracle_20241209231719.hbs create mode 100644 .history/templates/miracle_20241210072338.hbs create mode 100644 .history/templates/shield_20241203131106.hbs create mode 100644 .history/templates/shield_20241210071717.hbs create mode 100644 .history/templates/shield_20241210071719.hbs create mode 100644 .history/templates/shield_20241210071720.hbs create mode 100644 .history/templates/shield_20241210072355.hbs create mode 100644 .history/templates/shield_20241210172525.hbs create mode 100644 .history/templates/skill_20241130132029.hbs create mode 100644 .history/templates/skill_20241208155751.hbs create mode 100644 .history/templates/skill_20241208155755.hbs create mode 100644 .history/templates/skill_20241208155759.hbs create mode 100644 .history/templates/skill_20241208155807.hbs create mode 100644 .history/templates/skill_20241208155810.hbs create mode 100644 .history/templates/skill_20241208155814.hbs create mode 100644 .history/templates/skill_20241208155819.hbs create mode 100644 .history/templates/skill_20241208155820.hbs create mode 100644 .history/templates/skill_20241208155846.hbs create mode 100644 .history/templates/skill_20241208201615.hbs create mode 100644 .history/templates/skill_20241208201626.hbs create mode 100644 .history/templates/skill_20241208201631.hbs create mode 100644 .history/templates/skill_20241208201649.hbs create mode 100644 .history/templates/skill_20241208201659.hbs create mode 100644 .history/templates/skill_20241208201704.hbs create mode 100644 .history/templates/skill_20241208201705.hbs create mode 100644 .history/templates/skill_20241208201707.hbs create mode 100644 .history/templates/skill_20241208201711.hbs create mode 100644 .history/templates/skill_20241208201713.hbs create mode 100644 .history/templates/skill_20241208201715.hbs create mode 100644 .history/templates/skill_20241208201717.hbs create mode 100644 .history/templates/skill_20241208201718.hbs create mode 100644 .history/templates/skill_20241208203751.hbs create mode 100644 .history/templates/skill_20241208204250.hbs create mode 100644 .history/templates/skill_20241208204253.hbs create mode 100644 .history/templates/skill_20241208204258.hbs create mode 100644 .history/templates/skill_20241208204302.hbs create mode 100644 .history/templates/skill_20241208204311.hbs create mode 100644 .history/templates/skill_20241208204312.hbs create mode 100644 .history/templates/skill_20241208204314.hbs create mode 100644 .history/templates/skill_20241208204317.hbs create mode 100644 .history/templates/skill_20241208204318.hbs create mode 100644 .history/templates/skill_20241208204337.hbs create mode 100644 .history/templates/skill_20241208204340.hbs create mode 100644 .history/templates/skill_20241208204448.hbs create mode 100644 .history/templates/skill_20241208204601.hbs create mode 100644 .history/templates/skill_20241208204619.hbs create mode 100644 .history/templates/skill_20241208204621.hbs create mode 100644 .history/templates/skill_20241208204624.hbs create mode 100644 .history/templates/skill_20241208204626.hbs create mode 100644 .history/templates/skill_20241208204629.hbs create mode 100644 .history/templates/skill_20241208204630.hbs create mode 100644 .history/templates/skill_20241208204631.hbs create mode 100644 .history/templates/skill_20241208204634.hbs create mode 100644 .history/templates/skill_20241208205643.hbs create mode 100644 .history/templates/skill_20241208205644.hbs create mode 100644 .history/templates/skill_20241210072108.hbs create mode 100644 .history/templates/skill_20241210072122.hbs create mode 100644 .history/templates/skill_20241210072123.hbs create mode 100644 .history/templates/skill_20241210072124.hbs create mode 100644 .history/templates/spell_20241207223113.hbs create mode 100644 .history/templates/spell_20241210072359.hbs create mode 100644 .history/templates/vulnerability_20241130173822.hbs create mode 100644 .history/templates/vulnerability_20241210072403.hbs create mode 100644 .history/templates/vulnerability_20241217070713.hbs create mode 100644 .history/templates/vulnerability_20241217070715.hbs create mode 100644 .history/templates/weapon_20241207222221.hbs create mode 100644 .history/templates/weapon_20241208154950.hbs create mode 100644 .history/templates/weapon_20241208154951.hbs create mode 100644 .history/templates/weapon_20241208154953.hbs create mode 100644 .history/templates/weapon_20241208154957.hbs create mode 100644 .history/templates/weapon_20241208154958.hbs create mode 100644 .history/templates/weapon_20241208154959.hbs create mode 100644 .history/templates/weapon_20241208155008.hbs create mode 100644 .history/templates/weapon_20241208155009.hbs create mode 100644 .history/templates/weapon_20241208155020.hbs create mode 100644 .history/templates/weapon_20241208155035.hbs create mode 100644 .history/templates/weapon_20241208155037.hbs create mode 100644 .history/templates/weapon_20241208155038.hbs create mode 100644 .history/templates/weapon_20241208155039.hbs create mode 100644 .history/templates/weapon_20241208155919.hbs create mode 100644 .history/templates/weapon_20241208155923.hbs create mode 100644 .history/templates/weapon_20241208155928.hbs create mode 100644 .history/templates/weapon_20241208155937.hbs create mode 100644 .history/templates/weapon_20241208155941.hbs create mode 100644 .history/templates/weapon_20241208155951.hbs create mode 100644 .history/templates/weapon_20241208155954.hbs create mode 100644 .history/templates/weapon_20241208155955.hbs create mode 100644 .history/templates/weapon_20241210071725.hbs create mode 100644 .history/templates/weapon_20241210071727.hbs create mode 100644 .history/templates/weapon_20241210072406.hbs create mode 100644 .history/templates/weapon_20241210172530.hbs create mode 100644 .history/templates/weapon_20241217070551.hbs create mode 100644 .history/templates/weapon_20241217070555.hbs delete mode 100644 fonts/caslonpro-bold.otf delete mode 100644 fonts/caslonpro-bolditalic.otf delete mode 100644 fonts/caslonpro-italic.otf delete mode 100644 fonts/caslonpro-regular.otf delete mode 100644 fonts/catfranken-deutsch.ttf diff --git a/.history/lang/en_20241207230434.json b/.history/lang/en_20241207230434.json new file mode 100644 index 0000000..863d0b9 --- /dev/null +++ b/.history/lang/en_20241207230434.json @@ -0,0 +1,445 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160041.json b/.history/lang/en_20241208160041.json new file mode 100644 index 0000000..cdd10fa --- /dev/null +++ b/.history/lang/en_20241208160041.json @@ -0,0 +1,446 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": {} + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160046.json b/.history/lang/en_20241208160046.json new file mode 100644 index 0000000..1e008b6 --- /dev/null +++ b/.history/lang/en_20241208160046.json @@ -0,0 +1,448 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade" + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160049.json b/.history/lang/en_20241208160049.json new file mode 100644 index 0000000..e488d9b --- /dev/null +++ b/.history/lang/en_20241208160049.json @@ -0,0 +1,450 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160052.json b/.history/lang/en_20241208160052.json new file mode 100644 index 0000000..c9314f3 --- /dev/null +++ b/.history/lang/en_20241208160052.json @@ -0,0 +1,450 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "medi" + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160053.json b/.history/lang/en_20241208160053.json new file mode 100644 index 0000000..322bcee --- /dev/null +++ b/.history/lang/en_20241208160053.json @@ -0,0 +1,451 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "medium + " + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160057.json b/.history/lang/en_20241208160057.json new file mode 100644 index 0000000..daf9d24 --- /dev/null +++ b/.history/lang/en_20241208160057.json @@ -0,0 +1,450 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "medium " + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160100.json b/.history/lang/en_20241208160100.json new file mode 100644 index 0000000..5dc09f5 --- /dev/null +++ b/.history/lang/en_20241208160100.json @@ -0,0 +1,450 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "medium + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160103.json b/.history/lang/en_20241208160103.json new file mode 100644 index 0000000..733af16 --- /dev/null +++ b/.history/lang/en_20241208160103.json @@ -0,0 +1,451 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160120.json b/.history/lang/en_20241208160120.json new file mode 100644 index 0000000..04c325e --- /dev/null +++ b/.history/lang/en_20241208160120.json @@ -0,0 +1,453 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "mace": "Mace", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160121.json b/.history/lang/en_20241208160121.json new file mode 100644 index 0000000..7bd2cd6 --- /dev/null +++ b/.history/lang/en_20241208160121.json @@ -0,0 +1,453 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "mace": "Mace", + "spear": "Spear", + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160127.json b/.history/lang/en_20241208160127.json new file mode 100644 index 0000000..eca4650 --- /dev/null +++ b/.history/lang/en_20241208160127.json @@ -0,0 +1,454 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "mace": "Mace", + "hammer": "Hammer", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160131.json b/.history/lang/en_20241208160131.json new file mode 100644 index 0000000..c6b5766 --- /dev/null +++ b/.history/lang/en_20241208160131.json @@ -0,0 +1,453 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160132.json b/.history/lang/en_20241208160132.json new file mode 100644 index 0000000..33ae1d7 --- /dev/null +++ b/.history/lang/en_20241208160132.json @@ -0,0 +1,454 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160135.json b/.history/lang/en_20241208160135.json new file mode 100644 index 0000000..9dc26ca --- /dev/null +++ b/.history/lang/en_20241208160135.json @@ -0,0 +1,454 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "pole" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160138.json b/.history/lang/en_20241208160138.json new file mode 100644 index 0000000..a0ca72f --- /dev/null +++ b/.history/lang/en_20241208160138.json @@ -0,0 +1,455 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160139.json b/.history/lang/en_20241208160139.json new file mode 100644 index 0000000..186b955 --- /dev/null +++ b/.history/lang/en_20241208160139.json @@ -0,0 +1,455 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "spear": "Spear", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160141.json b/.history/lang/en_20241208160141.json new file mode 100644 index 0000000..ce5996e --- /dev/null +++ b/.history/lang/en_20241208160141.json @@ -0,0 +1,454 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160144.json b/.history/lang/en_20241208160144.json new file mode 100644 index 0000000..f0e81b6 --- /dev/null +++ b/.history/lang/en_20241208160144.json @@ -0,0 +1,455 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + },r + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "th" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160146.json b/.history/lang/en_20241208160146.json new file mode 100644 index 0000000..2e1f576 --- /dev/null +++ b/.history/lang/en_20241208160146.json @@ -0,0 +1,455 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "th" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160149.json b/.history/lang/en_20241208160149.json new file mode 100644 index 0000000..48ea549 --- /dev/null +++ b/.history/lang/en_20241208160149.json @@ -0,0 +1,455 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thr" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160155.json b/.history/lang/en_20241208160155.json new file mode 100644 index 0000000..13d6f31 --- /dev/null +++ b/.history/lang/en_20241208160155.json @@ -0,0 +1,457 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160156.json b/.history/lang/en_20241208160156.json new file mode 100644 index 0000000..015b909 --- /dev/null +++ b/.history/lang/en_20241208160156.json @@ -0,0 +1,457 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "crossbow": "Crossbow", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160219.json b/.history/lang/en_20241208160219.json new file mode 100644 index 0000000..31ad5a5 --- /dev/null +++ b/.history/lang/en_20241208160219.json @@ -0,0 +1,456 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160226.json b/.history/lang/en_20241208160226.json new file mode 100644 index 0000000..a64d24c --- /dev/null +++ b/.history/lang/en_20241208160226.json @@ -0,0 +1,458 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160227.json b/.history/lang/en_20241208160227.json new file mode 100644 index 0000000..dfa9b96 --- /dev/null +++ b/.history/lang/en_20241208160227.json @@ -0,0 +1,458 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "slashing" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160230.json b/.history/lang/en_20241208160230.json new file mode 100644 index 0000000..a64d24c --- /dev/null +++ b/.history/lang/en_20241208160230.json @@ -0,0 +1,458 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160232.json b/.history/lang/en_20241208160232.json new file mode 100644 index 0000000..2721cee --- /dev/null +++ b/.history/lang/en_20241208160232.json @@ -0,0 +1,458 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160233.json b/.history/lang/en_20241208160233.json new file mode 100644 index 0000000..13e973a --- /dev/null +++ b/.history/lang/en_20241208160233.json @@ -0,0 +1,459 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160246.json b/.history/lang/en_20241208160246.json new file mode 100644 index 0000000..d14c088 --- /dev/null +++ b/.history/lang/en_20241208160246.json @@ -0,0 +1,459 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160248.json b/.history/lang/en_20241208160248.json new file mode 100644 index 0000000..2533dbc --- /dev/null +++ b/.history/lang/en_20241208160248.json @@ -0,0 +1,459 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unar" + + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160250.json b/.history/lang/en_20241208160250.json new file mode 100644 index 0000000..45ad341 --- /dev/null +++ b/.history/lang/en_20241208160250.json @@ -0,0 +1,458 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed" + } + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160251.json b/.history/lang/en_20241208160251.json new file mode 100644 index 0000000..2fde51e --- /dev/null +++ b/.history/lang/en_20241208160251.json @@ -0,0 +1,458 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160252.json b/.history/lang/en_20241208160252.json new file mode 100644 index 0000000..2fde51e --- /dev/null +++ b/.history/lang/en_20241208160252.json @@ -0,0 +1,458 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160253.json b/.history/lang/en_20241208160253.json new file mode 100644 index 0000000..2fde51e --- /dev/null +++ b/.history/lang/en_20241208160253.json @@ -0,0 +1,458 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160327.json b/.history/lang/en_20241208160327.json new file mode 100644 index 0000000..b38b41a --- /dev/null +++ b/.history/lang/en_20241208160327.json @@ -0,0 +1,459 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160338.json b/.history/lang/en_20241208160338.json new file mode 100644 index 0000000..e2188f8 --- /dev/null +++ b/.history/lang/en_20241208160338.json @@ -0,0 +1,460 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "wea" + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160339.json b/.history/lang/en_20241208160339.json new file mode 100644 index 0000000..43367a9 --- /dev/null +++ b/.history/lang/en_20241208160339.json @@ -0,0 +1,462 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208160340.json b/.history/lang/en_20241208160340.json new file mode 100644 index 0000000..43367a9 --- /dev/null +++ b/.history/lang/en_20241208160340.json @@ -0,0 +1,462 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201739.json b/.history/lang/en_20241208201739.json new file mode 100644 index 0000000..0f9c018 --- /dev/null +++ b/.history/lang/en_20241208201739.json @@ -0,0 +1,465 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "label": "Bonus" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201743.json b/.history/lang/en_20241208201743.json new file mode 100644 index 0000000..fb5addc --- /dev/null +++ b/.history/lang/en_20241208201743.json @@ -0,0 +1,465 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201747.json b/.history/lang/en_20241208201747.json new file mode 100644 index 0000000..4e29f68 --- /dev/null +++ b/.history/lang/en_20241208201747.json @@ -0,0 +1,465 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201748.json b/.history/lang/en_20241208201748.json new file mode 100644 index 0000000..4e29f68 --- /dev/null +++ b/.history/lang/en_20241208201748.json @@ -0,0 +1,465 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201750.json b/.history/lang/en_20241208201750.json new file mode 100644 index 0000000..5e56180 --- /dev/null +++ b/.history/lang/en_20241208201750.json @@ -0,0 +1,465 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201752.json b/.history/lang/en_20241208201752.json new file mode 100644 index 0000000..1a3715d --- /dev/null +++ b/.history/lang/en_20241208201752.json @@ -0,0 +1,465 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201758.json b/.history/lang/en_20241208201758.json new file mode 100644 index 0000000..0a87e89 --- /dev/null +++ b/.history/lang/en_20241208201758.json @@ -0,0 +1,467 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201759.json b/.history/lang/en_20241208201759.json new file mode 100644 index 0000000..9b0d18a --- /dev/null +++ b/.history/lang/en_20241208201759.json @@ -0,0 +1,467 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201801.json b/.history/lang/en_20241208201801.json new file mode 100644 index 0000000..9316372 --- /dev/null +++ b/.history/lang/en_20241208201801.json @@ -0,0 +1,468 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + }, + + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201802.json b/.history/lang/en_20241208201802.json new file mode 100644 index 0000000..4659fc6 --- /dev/null +++ b/.history/lang/en_20241208201802.json @@ -0,0 +1,470 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + }, + "damage": { + "label": "Damage" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201804.json b/.history/lang/en_20241208201804.json new file mode 100644 index 0000000..4659fc6 --- /dev/null +++ b/.history/lang/en_20241208201804.json @@ -0,0 +1,470 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + }, + "damage": { + "label": "Damage" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201805.json b/.history/lang/en_20241208201805.json new file mode 100644 index 0000000..d89bef2 --- /dev/null +++ b/.history/lang/en_20241208201805.json @@ -0,0 +1,471 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + }, + "damage": { + "label": "Damage" + }, + + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201806.json b/.history/lang/en_20241208201806.json new file mode 100644 index 0000000..9bdfd02 --- /dev/null +++ b/.history/lang/en_20241208201806.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + }, + "damage": { + "label": "Damage" + }, + "defense": { + "label": "Defense" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201808.json b/.history/lang/en_20241208201808.json new file mode 100644 index 0000000..9bdfd02 --- /dev/null +++ b/.history/lang/en_20241208201808.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + }, + "damage": { + "label": "Damage" + }, + "defense": { + "label": "Defense" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201809.json b/.history/lang/en_20241208201809.json new file mode 100644 index 0000000..9bdfd02 --- /dev/null +++ b/.history/lang/en_20241208201809.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + }, + "damage": { + "label": "Damage" + }, + "defense": { + "label": "Defense" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201810.json b/.history/lang/en_20241208201810.json new file mode 100644 index 0000000..9bdfd02 --- /dev/null +++ b/.history/lang/en_20241208201810.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack" + }, + "damage": { + "label": "Damage" + }, + "defense": { + "label": "Defense" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201814.json b/.history/lang/en_20241208201814.json new file mode 100644 index 0000000..f825a9d --- /dev/null +++ b/.history/lang/en_20241208201814.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage" + }, + "defense": { + "label": "Defense" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201817.json b/.history/lang/en_20241208201817.json new file mode 100644 index 0000000..a0f5516 --- /dev/null +++ b/.history/lang/en_20241208201817.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonyus" + }, + "defense": { + "label": "Defense" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201818.json b/.history/lang/en_20241208201818.json new file mode 100644 index 0000000..4b7f853 --- /dev/null +++ b/.history/lang/en_20241208201818.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201821.json b/.history/lang/en_20241208201821.json new file mode 100644 index 0000000..1de6779 --- /dev/null +++ b/.history/lang/en_20241208201821.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bon,us" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201823.json b/.history/lang/en_20241208201823.json new file mode 100644 index 0000000..3ea4605 --- /dev/null +++ b/.history/lang/en_20241208201823.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201824.json b/.history/lang/en_20241208201824.json new file mode 100644 index 0000000..3ea4605 --- /dev/null +++ b/.history/lang/en_20241208201824.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208201825.json b/.history/lang/en_20241208201825.json new file mode 100644 index 0000000..3ea4605 --- /dev/null +++ b/.history/lang/en_20241208201825.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208204159.json b/.history/lang/en_20241208204159.json new file mode 100644 index 0000000..b38b41a --- /dev/null +++ b/.history/lang/en_20241208204159.json @@ -0,0 +1,459 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208204228.json b/.history/lang/en_20241208204228.json new file mode 100644 index 0000000..e153190 --- /dev/null +++ b/.history/lang/en_20241208204228.json @@ -0,0 +1,474 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208204229.json b/.history/lang/en_20241208204229.json new file mode 100644 index 0000000..e671217 --- /dev/null +++ b/.history/lang/en_20241208204229.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208204230.json b/.history/lang/en_20241208204230.json new file mode 100644 index 0000000..e671217 --- /dev/null +++ b/.history/lang/en_20241208204230.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241208204231.json b/.history/lang/en_20241208204231.json new file mode 100644 index 0000000..e671217 --- /dev/null +++ b/.history/lang/en_20241208204231.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151421.json b/.history/lang/en_20241209151421.json new file mode 100644 index 0000000..e671217 --- /dev/null +++ b/.history/lang/en_20241209151421.json @@ -0,0 +1,473 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151424.json b/.history/lang/en_20241209151424.json new file mode 100644 index 0000000..76bb9d8 --- /dev/null +++ b/.history/lang/en_20241209151424.json @@ -0,0 +1,474 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151430.json b/.history/lang/en_20241209151430.json new file mode 100644 index 0000000..44a131b --- /dev/null +++ b/.history/lang/en_20241209151430.json @@ -0,0 +1,474 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151434.json b/.history/lang/en_20241209151434.json new file mode 100644 index 0000000..ff5ae2f --- /dev/null +++ b/.history/lang/en_20241209151434.json @@ -0,0 +1,475 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "" + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151441.json b/.history/lang/en_20241209151441.json new file mode 100644 index 0000000..579c60f --- /dev/null +++ b/.history/lang/en_20241209151441.json @@ -0,0 +1,477 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + + } + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151444.json b/.history/lang/en_20241209151444.json new file mode 100644 index 0000000..f543b2c --- /dev/null +++ b/.history/lang/en_20241209151444.json @@ -0,0 +1,477 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151445.json b/.history/lang/en_20241209151445.json new file mode 100644 index 0000000..83fd115 --- /dev/null +++ b/.history/lang/en_20241209151445.json @@ -0,0 +1,484 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151453.json b/.history/lang/en_20241209151453.json new file mode 100644 index 0000000..83fd115 --- /dev/null +++ b/.history/lang/en_20241209151453.json @@ -0,0 +1,484 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151510.json b/.history/lang/en_20241209151510.json new file mode 100644 index 0000000..83fd115 --- /dev/null +++ b/.history/lang/en_20241209151510.json @@ -0,0 +1,484 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151520.json b/.history/lang/en_20241209151520.json new file mode 100644 index 0000000..afe5b61 --- /dev/null +++ b/.history/lang/en_20241209151520.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151521.json b/.history/lang/en_20241209151521.json new file mode 100644 index 0000000..afe5b61 --- /dev/null +++ b/.history/lang/en_20241209151521.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151526.json b/.history/lang/en_20241209151526.json new file mode 100644 index 0000000..06842c2 --- /dev/null +++ b/.history/lang/en_20241209151526.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151527.json b/.history/lang/en_20241209151527.json new file mode 100644 index 0000000..fb063c9 --- /dev/null +++ b/.history/lang/en_20241209151527.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151529.json b/.history/lang/en_20241209151529.json new file mode 100644 index 0000000..9b466f1 --- /dev/null +++ b/.history/lang/en_20241209151529.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalust": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151531.json b/.history/lang/en_20241209151531.json new file mode 100644 index 0000000..e7f6304 --- /dev/null +++ b/.history/lang/en_20241209151531.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151534.json b/.history/lang/en_20241209151534.json new file mode 100644 index 0000000..3704322 --- /dev/null +++ b/.history/lang/en_20241209151534.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151535.json b/.history/lang/en_20241209151535.json new file mode 100644 index 0000000..edaed72 --- /dev/null +++ b/.history/lang/en_20241209151535.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151537.json b/.history/lang/en_20241209151537.json new file mode 100644 index 0000000..9e4c1d7 --- /dev/null +++ b/.history/lang/en_20241209151537.json @@ -0,0 +1,520 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151539.json b/.history/lang/en_20241209151539.json new file mode 100644 index 0000000..9f386ba --- /dev/null +++ b/.history/lang/en_20241209151539.json @@ -0,0 +1,520 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "" + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151546.json b/.history/lang/en_20241209151546.json new file mode 100644 index 0000000..bfe5742 --- /dev/null +++ b/.history/lang/en_20241209151546.json @@ -0,0 +1,522 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151547.json b/.history/lang/en_20241209151547.json new file mode 100644 index 0000000..bfe5742 --- /dev/null +++ b/.history/lang/en_20241209151547.json @@ -0,0 +1,522 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151551.json b/.history/lang/en_20241209151551.json new file mode 100644 index 0000000..e7f10b3 --- /dev/null +++ b/.history/lang/en_20241209151551.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151554.json b/.history/lang/en_20241209151554.json new file mode 100644 index 0000000..c4c8d96 --- /dev/null +++ b/.history/lang/en_20241209151554.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151556.json b/.history/lang/en_20241209151556.json new file mode 100644 index 0000000..1c824d2 --- /dev/null +++ b/.history/lang/en_20241209151556.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151557.json b/.history/lang/en_20241209151557.json new file mode 100644 index 0000000..1c824d2 --- /dev/null +++ b/.history/lang/en_20241209151557.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151602.json b/.history/lang/en_20241209151602.json new file mode 100644 index 0000000..635cd73 --- /dev/null +++ b/.history/lang/en_20241209151602.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151604.json b/.history/lang/en_20241209151604.json new file mode 100644 index 0000000..1c824d2 --- /dev/null +++ b/.history/lang/en_20241209151604.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151607.json b/.history/lang/en_20241209151607.json new file mode 100644 index 0000000..18fa9d1 --- /dev/null +++ b/.history/lang/en_20241209151607.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151643.json b/.history/lang/en_20241209151643.json new file mode 100644 index 0000000..40bf4b7 --- /dev/null +++ b/.history/lang/en_20241209151643.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151656.json b/.history/lang/en_20241209151656.json new file mode 100644 index 0000000..c061d72 --- /dev/null +++ b/.history/lang/en_20241209151656.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151657.json b/.history/lang/en_20241209151657.json new file mode 100644 index 0000000..c061d72 --- /dev/null +++ b/.history/lang/en_20241209151657.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209151658.json b/.history/lang/en_20241209151658.json new file mode 100644 index 0000000..c061d72 --- /dev/null +++ b/.history/lang/en_20241209151658.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209231413.json b/.history/lang/en_20241209231413.json new file mode 100644 index 0000000..c061d72 --- /dev/null +++ b/.history/lang/en_20241209231413.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241209231449.json b/.history/lang/en_20241209231449.json new file mode 100644 index 0000000..c061d72 --- /dev/null +++ b/.history/lang/en_20241209231449.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071126.json b/.history/lang/en_20241210071126.json new file mode 100644 index 0000000..4c53954 --- /dev/null +++ b/.history/lang/en_20241210071126.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071129.json b/.history/lang/en_20241210071129.json new file mode 100644 index 0000000..4308a4f --- /dev/null +++ b/.history/lang/en_20241210071129.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementeduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071134.json b/.history/lang/en_20241210071134.json new file mode 100644 index 0000000..0127dba --- /dev/null +++ b/.history/lang/en_20241210071134.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071137.json b/.history/lang/en_20241210071137.json new file mode 100644 index 0000000..232e609 --- /dev/null +++ b/.history/lang/en_20241210071137.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071142.json b/.history/lang/en_20241210071142.json new file mode 100644 index 0000000..956caaf --- /dev/null +++ b/.history/lang/en_20241210071142.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071907.json b/.history/lang/en_20241210071907.json new file mode 100644 index 0000000..97cf41b --- /dev/null +++ b/.history/lang/en_20241210071907.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071913.json b/.history/lang/en_20241210071913.json new file mode 100644 index 0000000..9de8ff4 --- /dev/null +++ b/.history/lang/en_20241210071913.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071929.json b/.history/lang/en_20241210071929.json new file mode 100644 index 0000000..0ff190e --- /dev/null +++ b/.history/lang/en_20241210071929.json @@ -0,0 +1,516 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071939.json b/.history/lang/en_20241210071939.json new file mode 100644 index 0000000..99aa283 --- /dev/null +++ b/.history/lang/en_20241210071939.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071942.json b/.history/lang/en_20241210071942.json new file mode 100644 index 0000000..6cf6725 --- /dev/null +++ b/.history/lang/en_20241210071942.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "enLoadc": { + "label": "Cost" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071944.json b/.history/lang/en_20241210071944.json new file mode 100644 index 0000000..b8d9a0b --- /dev/null +++ b/.history/lang/en_20241210071944.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "enLoadc": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071946.json b/.history/lang/en_20241210071946.json new file mode 100644 index 0000000..a082286 --- /dev/null +++ b/.history/lang/en_20241210071946.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "enLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210071949.json b/.history/lang/en_20241210071949.json new file mode 100644 index 0000000..895df96 --- /dev/null +++ b/.history/lang/en_20241210071949.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210072002.json b/.history/lang/en_20241210072002.json new file mode 100644 index 0000000..895df96 --- /dev/null +++ b/.history/lang/en_20241210072002.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075355.json b/.history/lang/en_20241210075355.json new file mode 100644 index 0000000..e7536f3 --- /dev/null +++ b/.history/lang/en_20241210075355.json @@ -0,0 +1,519 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075359.json b/.history/lang/en_20241210075359.json new file mode 100644 index 0000000..bc77739 --- /dev/null +++ b/.history/lang/en_20241210075359.json @@ -0,0 +1,520 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + + }, + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075404.json b/.history/lang/en_20241210075404.json new file mode 100644 index 0000000..5f8c520 --- /dev/null +++ b/.history/lang/en_20241210075404.json @@ -0,0 +1,520 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves" + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075406.json b/.history/lang/en_20241210075406.json new file mode 100644 index 0000000..2e00c40 --- /dev/null +++ b/.history/lang/en_20241210075406.json @@ -0,0 +1,522 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075454.json b/.history/lang/en_20241210075454.json new file mode 100644 index 0000000..dbda176 --- /dev/null +++ b/.history/lang/en_20241210075454.json @@ -0,0 +1,522 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "" + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075457.json b/.history/lang/en_20241210075457.json new file mode 100644 index 0000000..11d9b82 --- /dev/null +++ b/.history/lang/en_20241210075457.json @@ -0,0 +1,524 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075501.json b/.history/lang/en_20241210075501.json new file mode 100644 index 0000000..c773a4a --- /dev/null +++ b/.history/lang/en_20241210075501.json @@ -0,0 +1,525 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075503.json b/.history/lang/en_20241210075503.json new file mode 100644 index 0000000..0ff51f3 --- /dev/null +++ b/.history/lang/en_20241210075503.json @@ -0,0 +1,525 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge" + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075507.json b/.history/lang/en_20241210075507.json new file mode 100644 index 0000000..adf7cb2 --- /dev/null +++ b/.history/lang/en_20241210075507.json @@ -0,0 +1,527 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075512.json b/.history/lang/en_20241210075512.json new file mode 100644 index 0000000..a7a3e84 --- /dev/null +++ b/.history/lang/en_20241210075512.json @@ -0,0 +1,528 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075515.json b/.history/lang/en_20241210075515.json new file mode 100644 index 0000000..bf07c08 --- /dev/null +++ b/.history/lang/en_20241210075515.json @@ -0,0 +1,528 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "tough" + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075516.json b/.history/lang/en_20241210075516.json new file mode 100644 index 0000000..5311715 --- /dev/null +++ b/.history/lang/en_20241210075516.json @@ -0,0 +1,530 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075524.json b/.history/lang/en_20241210075524.json new file mode 100644 index 0000000..b2f639f --- /dev/null +++ b/.history/lang/en_20241210075524.json @@ -0,0 +1,533 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075531.json b/.history/lang/en_20241210075531.json new file mode 100644 index 0000000..cbf43d4 --- /dev/null +++ b/.history/lang/en_20241210075531.json @@ -0,0 +1,537 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075536.json b/.history/lang/en_20241210075536.json new file mode 100644 index 0000000..1b02302 --- /dev/null +++ b/.history/lang/en_20241210075536.json @@ -0,0 +1,539 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain":! { + "label": "Pain" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075537.json b/.history/lang/en_20241210075537.json new file mode 100644 index 0000000..3ee62a7 --- /dev/null +++ b/.history/lang/en_20241210075537.json @@ -0,0 +1,539 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075538.json b/.history/lang/en_20241210075538.json new file mode 100644 index 0000000..d9606a1 --- /dev/null +++ b/.history/lang/en_20241210075538.json @@ -0,0 +1,539 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075545.json b/.history/lang/en_20241210075545.json new file mode 100644 index 0000000..4888a82 --- /dev/null +++ b/.history/lang/en_20241210075545.json @@ -0,0 +1,542 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075548.json b/.history/lang/en_20241210075548.json new file mode 100644 index 0000000..1cb917f --- /dev/null +++ b/.history/lang/en_20241210075548.json @@ -0,0 +1,542 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str" + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075549.json b/.history/lang/en_20241210075549.json new file mode 100644 index 0000000..1cb917f --- /dev/null +++ b/.history/lang/en_20241210075549.json @@ -0,0 +1,542 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str" + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075551.json b/.history/lang/en_20241210075551.json new file mode 100644 index 0000000..1cb917f --- /dev/null +++ b/.history/lang/en_20241210075551.json @@ -0,0 +1,542 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str" + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075553.json b/.history/lang/en_20241210075553.json new file mode 100644 index 0000000..9f48b42 --- /dev/null +++ b/.history/lang/en_20241210075553.json @@ -0,0 +1,545 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075559.json b/.history/lang/en_20241210075559.json new file mode 100644 index 0000000..a0c95ab --- /dev/null +++ b/.history/lang/en_20241210075559.json @@ -0,0 +1,545 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agi" + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075601.json b/.history/lang/en_20241210075601.json new file mode 100644 index 0000000..93eeff5 --- /dev/null +++ b/.history/lang/en_20241210075601.json @@ -0,0 +1,547 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075603.json b/.history/lang/en_20241210075603.json new file mode 100644 index 0000000..b5c53c7 --- /dev/null +++ b/.history/lang/en_20241210075603.json @@ -0,0 +1,547 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "strength": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075604.json b/.history/lang/en_20241210075604.json new file mode 100644 index 0000000..93eeff5 --- /dev/null +++ b/.history/lang/en_20241210075604.json @@ -0,0 +1,547 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075624.json b/.history/lang/en_20241210075624.json new file mode 100644 index 0000000..430f6af --- /dev/null +++ b/.history/lang/en_20241210075624.json @@ -0,0 +1,550 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + }, + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210075625.json b/.history/lang/en_20241210075625.json new file mode 100644 index 0000000..035ed9d --- /dev/null +++ b/.history/lang/en_20241210075625.json @@ -0,0 +1,550 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172550.json b/.history/lang/en_20241210172550.json new file mode 100644 index 0000000..422a751 --- /dev/null +++ b/.history/lang/en_20241210172550.json @@ -0,0 +1,553 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172555.json b/.history/lang/en_20241210172555.json new file mode 100644 index 0000000..fd0e585 --- /dev/null +++ b/.history/lang/en_20241210172555.json @@ -0,0 +1,554 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172559.json b/.history/lang/en_20241210172559.json new file mode 100644 index 0000000..cf1a7ef --- /dev/null +++ b/.history/lang/en_20241210172559.json @@ -0,0 +1,554 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped" + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172601.json b/.history/lang/en_20241210172601.json new file mode 100644 index 0000000..cf1a7ef --- /dev/null +++ b/.history/lang/en_20241210172601.json @@ -0,0 +1,554 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped" + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172604.json b/.history/lang/en_20241210172604.json new file mode 100644 index 0000000..6ee7f52 --- /dev/null +++ b/.history/lang/en_20241210172604.json @@ -0,0 +1,556 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172615.json b/.history/lang/en_20241210172615.json new file mode 100644 index 0000000..a0f8143 --- /dev/null +++ b/.history/lang/en_20241210172615.json @@ -0,0 +1,559 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "isField": { + "label": "Field" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172745.json b/.history/lang/en_20241210172745.json new file mode 100644 index 0000000..5ec25e1 --- /dev/null +++ b/.history/lang/en_20241210172745.json @@ -0,0 +1,560 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "isField": { + "label": "Field" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172747.json b/.history/lang/en_20241210172747.json new file mode 100644 index 0000000..f7dbc8f --- /dev/null +++ b/.history/lang/en_20241210172747.json @@ -0,0 +1,560 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "isField": { + "label": "Field" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped" + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210172748.json b/.history/lang/en_20241210172748.json new file mode 100644 index 0000000..69136bf --- /dev/null +++ b/.history/lang/en_20241210172748.json @@ -0,0 +1,562 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "isField": { + "label": "Field" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210173415.json b/.history/lang/en_20241210173415.json new file mode 100644 index 0000000..ab5c452 --- /dev/null +++ b/.history/lang/en_20241210173415.json @@ -0,0 +1,562 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "isHelmet": { + "label": "Field" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210173416.json b/.history/lang/en_20241210173416.json new file mode 100644 index 0000000..ab5c452 --- /dev/null +++ b/.history/lang/en_20241210173416.json @@ -0,0 +1,562 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "isHelmet": { + "label": "Field" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210173417.json b/.history/lang/en_20241210173417.json new file mode 100644 index 0000000..ab5c452 --- /dev/null +++ b/.history/lang/en_20241210173417.json @@ -0,0 +1,562 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "isHelmet": { + "label": "Field" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210173955.json b/.history/lang/en_20241210173955.json new file mode 100644 index 0000000..cc8cd66 --- /dev/null +++ b/.history/lang/en_20241210173955.json @@ -0,0 +1,562 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210173957.json b/.history/lang/en_20241210173957.json new file mode 100644 index 0000000..3de42d3 --- /dev/null +++ b/.history/lang/en_20241210173957.json @@ -0,0 +1,562 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210205431.json b/.history/lang/en_20241210205431.json new file mode 100644 index 0000000..eb88247 --- /dev/null +++ b/.history/lang/en_20241210205431.json @@ -0,0 +1,563 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "saves" + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210205433.json b/.history/lang/en_20241210205433.json new file mode 100644 index 0000000..7211540 --- /dev/null +++ b/.history/lang/en_20241210205433.json @@ -0,0 +1,565 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "saves": { + + } + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210205434.json b/.history/lang/en_20241210205434.json new file mode 100644 index 0000000..2d27e0b --- /dev/null +++ b/.history/lang/en_20241210205434.json @@ -0,0 +1,565 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "saves": { + "will" + } + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210205436.json b/.history/lang/en_20241210205436.json new file mode 100644 index 0000000..db48c2a --- /dev/null +++ b/.history/lang/en_20241210205436.json @@ -0,0 +1,570 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + } + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210205437.json b/.history/lang/en_20241210205437.json new file mode 100644 index 0000000..9bfb644 --- /dev/null +++ b/.history/lang/en_20241210205437.json @@ -0,0 +1,570 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210211753.json b/.history/lang/en_20241210211753.json new file mode 100644 index 0000000..166fc84 --- /dev/null +++ b/.history/lang/en_20241210211753.json @@ -0,0 +1,571 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves" + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210211755.json b/.history/lang/en_20241210211755.json new file mode 100644 index 0000000..08fef09 --- /dev/null +++ b/.history/lang/en_20241210211755.json @@ -0,0 +1,571 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210211759.json b/.history/lang/en_20241210211759.json new file mode 100644 index 0000000..c4d4f91 --- /dev/null +++ b/.history/lang/en_20241210211759.json @@ -0,0 +1,571 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225328.json b/.history/lang/en_20241210225328.json new file mode 100644 index 0000000..819a290 --- /dev/null +++ b/.history/lang/en_20241210225328.json @@ -0,0 +1,572 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges" + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225330.json b/.history/lang/en_20241210225330.json new file mode 100644 index 0000000..57bd79a --- /dev/null +++ b/.history/lang/en_20241210225330.json @@ -0,0 +1,572 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225333.json b/.history/lang/en_20241210225333.json new file mode 100644 index 0000000..cbae457 --- /dev/null +++ b/.history/lang/en_20241210225333.json @@ -0,0 +1,572 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "" + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225340.json b/.history/lang/en_20241210225340.json new file mode 100644 index 0000000..6a378c3 --- /dev/null +++ b/.history/lang/en_20241210225340.json @@ -0,0 +1,573 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225344.json b/.history/lang/en_20241210225344.json new file mode 100644 index 0000000..cae0bf8 --- /dev/null +++ b/.history/lang/en_20241210225344.json @@ -0,0 +1,573 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges" + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225347.json b/.history/lang/en_20241210225347.json new file mode 100644 index 0000000..35b9e96 --- /dev/null +++ b/.history/lang/en_20241210225347.json @@ -0,0 +1,575 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + + } + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225350.json b/.history/lang/en_20241210225350.json new file mode 100644 index 0000000..ecb881f --- /dev/null +++ b/.history/lang/en_20241210225350.json @@ -0,0 +1,575 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225353.json b/.history/lang/en_20241210225353.json new file mode 100644 index 0000000..97830f3 --- /dev/null +++ b/.history/lang/en_20241210225353.json @@ -0,0 +1,575 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "stre" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225355.json b/.history/lang/en_20241210225355.json new file mode 100644 index 0000000..163b7c4 --- /dev/null +++ b/.history/lang/en_20241210225355.json @@ -0,0 +1,575 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225356.json b/.history/lang/en_20241210225356.json new file mode 100644 index 0000000..78fdc22 --- /dev/null +++ b/.history/lang/en_20241210225356.json @@ -0,0 +1,575 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225402.json b/.history/lang/en_20241210225402.json new file mode 100644 index 0000000..4628346 --- /dev/null +++ b/.history/lang/en_20241210225402.json @@ -0,0 +1,575 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225404.json b/.history/lang/en_20241210225404.json new file mode 100644 index 0000000..848e754 --- /dev/null +++ b/.history/lang/en_20241210225404.json @@ -0,0 +1,575 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "strength" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225406.json b/.history/lang/en_20241210225406.json new file mode 100644 index 0000000..eeed56f --- /dev/null +++ b/.history/lang/en_20241210225406.json @@ -0,0 +1,575 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225407.json b/.history/lang/en_20241210225407.json new file mode 100644 index 0000000..bdfbdbf --- /dev/null +++ b/.history/lang/en_20241210225407.json @@ -0,0 +1,576 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225408.json b/.history/lang/en_20241210225408.json new file mode 100644 index 0000000..8e75ac5 --- /dev/null +++ b/.history/lang/en_20241210225408.json @@ -0,0 +1,576 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225410.json b/.history/lang/en_20241210225410.json new file mode 100644 index 0000000..f3efec0 --- /dev/null +++ b/.history/lang/en_20241210225410.json @@ -0,0 +1,576 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225415.json b/.history/lang/en_20241210225415.json new file mode 100644 index 0000000..c17c0a0 --- /dev/null +++ b/.history/lang/en_20241210225415.json @@ -0,0 +1,576 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225418.json b/.history/lang/en_20241210225418.json new file mode 100644 index 0000000..185695d --- /dev/null +++ b/.history/lang/en_20241210225418.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225420.json b/.history/lang/en_20241210225420.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225420.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225421.json b/.history/lang/en_20241210225421.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225421.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225438.json b/.history/lang/en_20241210225438.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225438.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225439.json b/.history/lang/en_20241210225439.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225439.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225440.json b/.history/lang/en_20241210225440.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225440.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225441.json b/.history/lang/en_20241210225441.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225441.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225557.json b/.history/lang/en_20241210225557.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225557.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225558.json b/.history/lang/en_20241210225558.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225558.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210225600.json b/.history/lang/en_20241210225600.json new file mode 100644 index 0000000..a333a3e --- /dev/null +++ b/.history/lang/en_20241210225600.json @@ -0,0 +1,577 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230016.json b/.history/lang/en_20241210230016.json new file mode 100644 index 0000000..8ab0a53 --- /dev/null +++ b/.history/lang/en_20241210230016.json @@ -0,0 +1,578 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "H" + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230017.json b/.history/lang/en_20241210230017.json new file mode 100644 index 0000000..54e3d29 --- /dev/null +++ b/.history/lang/en_20241210230017.json @@ -0,0 +1,578 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP" + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230018.json b/.history/lang/en_20241210230018.json new file mode 100644 index 0000000..b26ccb0 --- /dev/null +++ b/.history/lang/en_20241210230018.json @@ -0,0 +1,578 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230240.json b/.history/lang/en_20241210230240.json new file mode 100644 index 0000000..a5af56a --- /dev/null +++ b/.history/lang/en_20241210230240.json @@ -0,0 +1,579 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception" + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230241.json b/.history/lang/en_20241210230241.json new file mode 100644 index 0000000..621a256 --- /dev/null +++ b/.history/lang/en_20241210230241.json @@ -0,0 +1,581 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + + } + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230244.json b/.history/lang/en_20241210230244.json new file mode 100644 index 0000000..59b065c --- /dev/null +++ b/.history/lang/en_20241210230244.json @@ -0,0 +1,581 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "" + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230245.json b/.history/lang/en_20241210230245.json new file mode 100644 index 0000000..30c5a1a --- /dev/null +++ b/.history/lang/en_20241210230245.json @@ -0,0 +1,581 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value" + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230249.json b/.history/lang/en_20241210230249.json new file mode 100644 index 0000000..4daeb79 --- /dev/null +++ b/.history/lang/en_20241210230249.json @@ -0,0 +1,583 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230253.json b/.history/lang/en_20241210230253.json new file mode 100644 index 0000000..0639351 --- /dev/null +++ b/.history/lang/en_20241210230253.json @@ -0,0 +1,584 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230254.json b/.history/lang/en_20241210230254.json new file mode 100644 index 0000000..e4e26d1 --- /dev/null +++ b/.history/lang/en_20241210230254.json @@ -0,0 +1,586 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230255.json b/.history/lang/en_20241210230255.json new file mode 100644 index 0000000..e4e26d1 --- /dev/null +++ b/.history/lang/en_20241210230255.json @@ -0,0 +1,586 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230316.json b/.history/lang/en_20241210230316.json new file mode 100644 index 0000000..86da980 --- /dev/null +++ b/.history/lang/en_20241210230316.json @@ -0,0 +1,585 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230318.json b/.history/lang/en_20241210230318.json new file mode 100644 index 0000000..38aed00 --- /dev/null +++ b/.history/lang/en_20241210230318.json @@ -0,0 +1,584 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": "Perception" + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230320.json b/.history/lang/en_20241210230320.json new file mode 100644 index 0000000..5a47544 --- /dev/null +++ b/.history/lang/en_20241210230320.json @@ -0,0 +1,584 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": "Perception"; + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230321.json b/.history/lang/en_20241210230321.json new file mode 100644 index 0000000..e670b50 --- /dev/null +++ b/.history/lang/en_20241210230321.json @@ -0,0 +1,584 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": "Perception", + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230324.json b/.history/lang/en_20241210230324.json new file mode 100644 index 0000000..25b08c0 --- /dev/null +++ b/.history/lang/en_20241210230324.json @@ -0,0 +1,583 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": "Perception", + "bonus": "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230325.json b/.history/lang/en_20241210230325.json new file mode 100644 index 0000000..a96205b --- /dev/null +++ b/.history/lang/en_20241210230325.json @@ -0,0 +1,583 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": "Perception", + "bonus": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230327.json b/.history/lang/en_20241210230327.json new file mode 100644 index 0000000..3b27f4a --- /dev/null +++ b/.history/lang/en_20241210230327.json @@ -0,0 +1,582 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": "Perception", + "bonus": "Bonus" + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230331.json b/.history/lang/en_20241210230331.json new file mode 100644 index 0000000..3b27f4a --- /dev/null +++ b/.history/lang/en_20241210230331.json @@ -0,0 +1,582 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": "Perception", + "bonus": "Bonus" + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230347.json b/.history/lang/en_20241210230347.json new file mode 100644 index 0000000..ffb9d08 --- /dev/null +++ b/.history/lang/en_20241210230347.json @@ -0,0 +1,584 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + + } + "bonus": "Bonus" + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230348.json b/.history/lang/en_20241210230348.json new file mode 100644 index 0000000..3ee4e62 --- /dev/null +++ b/.history/lang/en_20241210230348.json @@ -0,0 +1,584 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + } + "bonus": "Bonus" + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230349.json b/.history/lang/en_20241210230349.json new file mode 100644 index 0000000..2daa76a --- /dev/null +++ b/.history/lang/en_20241210230349.json @@ -0,0 +1,584 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": "Bonus" + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230352.json b/.history/lang/en_20241210230352.json new file mode 100644 index 0000000..e4e26d1 --- /dev/null +++ b/.history/lang/en_20241210230352.json @@ -0,0 +1,586 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230353.json b/.history/lang/en_20241210230353.json new file mode 100644 index 0000000..e4e26d1 --- /dev/null +++ b/.history/lang/en_20241210230353.json @@ -0,0 +1,586 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230508.json b/.history/lang/en_20241210230508.json new file mode 100644 index 0000000..7693c5f --- /dev/null +++ b/.history/lang/en_20241210230508.json @@ -0,0 +1,587 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception" + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230513.json b/.history/lang/en_20241210230513.json new file mode 100644 index 0000000..eb582be --- /dev/null +++ b/.history/lang/en_20241210230513.json @@ -0,0 +1,588 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus" + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230514.json b/.history/lang/en_20241210230514.json new file mode 100644 index 0000000..a703d6c --- /dev/null +++ b/.history/lang/en_20241210230514.json @@ -0,0 +1,588 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230729.json b/.history/lang/en_20241210230729.json new file mode 100644 index 0000000..b72a86c --- /dev/null +++ b/.history/lang/en_20241210230729.json @@ -0,0 +1,589 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit" + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230731.json b/.history/lang/en_20241210230731.json new file mode 100644 index 0000000..7d019ae --- /dev/null +++ b/.history/lang/en_20241210230731.json @@ -0,0 +1,589 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230736.json b/.history/lang/en_20241210230736.json new file mode 100644 index 0000000..0c8a137 --- /dev/null +++ b/.history/lang/en_20241210230736.json @@ -0,0 +1,590 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned" + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230737.json b/.history/lang/en_20241210230737.json new file mode 100644 index 0000000..3f18f99 --- /dev/null +++ b/.history/lang/en_20241210230737.json @@ -0,0 +1,590 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230803.json b/.history/lang/en_20241210230803.json new file mode 100644 index 0000000..3f18f99 --- /dev/null +++ b/.history/lang/en_20241210230803.json @@ -0,0 +1,590 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230840.json b/.history/lang/en_20241210230840.json new file mode 100644 index 0000000..7347e3f --- /dev/null +++ b/.history/lang/en_20241210230840.json @@ -0,0 +1,591 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck" + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230841.json b/.history/lang/en_20241210230841.json new file mode 100644 index 0000000..dcada8e --- /dev/null +++ b/.history/lang/en_20241210230841.json @@ -0,0 +1,592 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230842.json b/.history/lang/en_20241210230842.json new file mode 100644 index 0000000..7b01997 --- /dev/null +++ b/.history/lang/en_20241210230842.json @@ -0,0 +1,592 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210230925.json b/.history/lang/en_20241210230925.json new file mode 100644 index 0000000..7b01997 --- /dev/null +++ b/.history/lang/en_20241210230925.json @@ -0,0 +1,592 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231340.json b/.history/lang/en_20241210231340.json new file mode 100644 index 0000000..66f0cf6 --- /dev/null +++ b/.history/lang/en_20241210231340.json @@ -0,0 +1,593 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movemebt" + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231342.json b/.history/lang/en_20241210231342.json new file mode 100644 index 0000000..bb043e4 --- /dev/null +++ b/.history/lang/en_20241210231342.json @@ -0,0 +1,593 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement" + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231345.json b/.history/lang/en_20241210231345.json new file mode 100644 index 0000000..fe1a9ea --- /dev/null +++ b/.history/lang/en_20241210231345.json @@ -0,0 +1,595 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement": { + + } + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231349.json b/.history/lang/en_20241210231349.json new file mode 100644 index 0000000..fda5f63 --- /dev/null +++ b/.history/lang/en_20241210231349.json @@ -0,0 +1,595 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement": { + "wal" + } + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231350.json b/.history/lang/en_20241210231350.json new file mode 100644 index 0000000..05f1d28 --- /dev/null +++ b/.history/lang/en_20241210231350.json @@ -0,0 +1,596 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement": { + "walk": "Walk", + + } + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231353.json b/.history/lang/en_20241210231353.json new file mode 100644 index 0000000..e68ba88 --- /dev/null +++ b/.history/lang/en_20241210231353.json @@ -0,0 +1,597 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement": { + "walk": "Walk", + "run": "Run", + + } + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231354.json b/.history/lang/en_20241210231354.json new file mode 100644 index 0000000..771e839 --- /dev/null +++ b/.history/lang/en_20241210231354.json @@ -0,0 +1,598 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + + } + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231357.json b/.history/lang/en_20241210231357.json new file mode 100644 index 0000000..b3cf935 --- /dev/null +++ b/.history/lang/en_20241210231357.json @@ -0,0 +1,598 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + } + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231358.json b/.history/lang/en_20241210231358.json new file mode 100644 index 0000000..c883cf8 --- /dev/null +++ b/.history/lang/en_20241210231358.json @@ -0,0 +1,598 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231359.json b/.history/lang/en_20241210231359.json new file mode 100644 index 0000000..c883cf8 --- /dev/null +++ b/.history/lang/en_20241210231359.json @@ -0,0 +1,598 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231452.json b/.history/lang/en_20241210231452.json new file mode 100644 index 0000000..018915b --- /dev/null +++ b/.history/lang/en_20241210231452.json @@ -0,0 +1,599 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231455.json b/.history/lang/en_20241210231455.json new file mode 100644 index 0000000..83449e5 --- /dev/null +++ b/.history/lang/en_20241210231455.json @@ -0,0 +1,599 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Mo" + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231456.json b/.history/lang/en_20241210231456.json new file mode 100644 index 0000000..eb8185b --- /dev/null +++ b/.history/lang/en_20241210231456.json @@ -0,0 +1,599 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement" + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241210231457.json b/.history/lang/en_20241210231457.json new file mode 100644 index 0000000..e4e1efc --- /dev/null +++ b/.history/lang/en_20241210231457.json @@ -0,0 +1,599 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241217070308.json b/.history/lang/en_20241217070308.json new file mode 100644 index 0000000..82fa820 --- /dev/null +++ b/.history/lang/en_20241217070308.json @@ -0,0 +1,600 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "combatProgressionDice" + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241217070311.json b/.history/lang/en_20241217070311.json new file mode 100644 index 0000000..ef3ebdc --- /dev/null +++ b/.history/lang/en_20241217070311.json @@ -0,0 +1,602 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "combatProgressionDice": { + + } + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241217070313.json b/.history/lang/en_20241217070313.json new file mode 100644 index 0000000..d0f7f00 --- /dev/null +++ b/.history/lang/en_20241217070313.json @@ -0,0 +1,602 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "combatProgressionDice": { + "label": "Combat progression dice" + }, + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241217070326.json b/.history/lang/en_20241217070326.json new file mode 100644 index 0000000..d0f7f00 --- /dev/null +++ b/.history/lang/en_20241217070326.json @@ -0,0 +1,602 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "combatProgressionDice": { + "label": "Combat progression dice" + }, + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241217070729.json b/.history/lang/en_20241217070729.json new file mode 100644 index 0000000..8dc7b3f --- /dev/null +++ b/.history/lang/en_20241217070729.json @@ -0,0 +1,603 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "combatProgressionDice": { + "label": "Combat progression dice" + }, + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + gainedPoints + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241217070732.json b/.history/lang/en_20241217070732.json new file mode 100644 index 0000000..b4ee464 --- /dev/null +++ b/.history/lang/en_20241217070732.json @@ -0,0 +1,603 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "combatProgressionDice": { + "label": "Combat progression dice" + }, + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "gainedPoints + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241217070733.json b/.history/lang/en_20241217070733.json new file mode 100644 index 0000000..ce0088b --- /dev/null +++ b/.history/lang/en_20241217070733.json @@ -0,0 +1,603 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "combatProgressionDice": { + "label": "Combat progression dice" + }, + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "gainedPoints" + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lang/en_20241217070734.json b/.history/lang/en_20241217070734.json new file mode 100644 index 0000000..ae3df0e --- /dev/null +++ b/.history/lang/en_20241217070734.json @@ -0,0 +1,605 @@ +{ + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "skill": "Skill", + "weapon": "Weapon", + "armor": "Armor", + "spell": "Spell", + "gift": "Gift", + "vulnerability": "Vulnerability", + "save": "Save", + "equipment": "Equipment" , + "shield": "Shield", + "miracle": "Miracle" + } + }, + + "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, + "Character": { + "FIELDS": { + "str": { + "label": "Strength" + }, + "dex": { + "label": "Dexterity" + }, + "int": { + "label": "Intelligence" + }, + "wis": { + "label": "Wisdom" + }, + "con": { + "label": "Constitution" + }, + "char": { + "label": "Charisma" + }, + "app": { + "label": "Appearance" + } + }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, + "saves": { + "will": { + "label": "Will" + }, + "dodge": { + "label": "Dodge" + }, + "toughness": { + "label": "Toughness" + }, + "contagion": { + "label": "Contagion" + }, + "poison": { + "label": "Poison" + }, + "pain": { + "label": "Pain" + } + }, + "challenges": { + "str": { + "label": "Strength" + }, + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + } + } + }, + "Opponent": { + "FIELDS": { + } + }, + "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, + "FIELDS": { + "category": { + "label": "Category" + }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Equipment": { + "FIELDS": { + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, + "description": { + "label": "Description" + } + } + }, + "Gift": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + } + } + }, + "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, + "WeaponClass": { + "longblade": "Long blade", + "shortblade": "Short blade", + "mediumblade": "Medium blade", + "axe": "Axe", + "hammer": "Hammer", + "polearm": "Polearm", + "thrown": "Thrown", + "bow": "Bow", + "flail": "Flail", + "sling": "Sling", + "unarmed": "Unarmed", + "mace": "Mace" + }, + "FIELDS": { + "combatProgressionDice": { + "label": "Combat progression dice" + }, + "equipped": { + "label": "Equipped" + }, + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "weaponRange": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Armor": { + "Category": { + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "equipped": { + "label": "Equipped?" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "armorType": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "hp": { + "label": "HP" + }, + "damageReduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "equipped": { + "label": "Equipped" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "encLoad": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Spell": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "spellRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" + } + } + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "gainedPoints": { + "label": "Gained points" + }, + "description": { + "label": "Description" + } + } + }, + "Save": { + "FIELDS": { + "value": { + "label": "Value" + }, + "description": { + "label": "Description" + } + } + }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, + "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", + "characteristics": "Characteristics", + "characteristic": "Characteristic", + "description": "Description", + "notes": "Notes", + "total": "Total", + "details": "Details", + "skills": "Skills", + "equipment": "Equipment", + "weapons": "Weapons", + "spells" : "Spells", + "level": "Level", + "damage": "Damage", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "newArmor": "New armor", + "newWeapon": "New weapon", + "armor": "Armor", + "malus": "Malus", + "jet": "Roll", + "experience": "Experience", + "maximum": "Maximum", + "pc": "PC", + "biography": "Biography", + "gifts": "Gifts", + "vulnerabilities": "Vulnerabilities", + "str": "STR", + "wis": "WIS", + "int": "INT", + "con": "CON", + "dex": "DEX", + "luc": "LUC", + "app": "APP", + "cha": "CHA" + }, + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", + "Warning": { + }, + "Roll": { + "save": "Jet de sauvegarde
{save}", + "resource": "Jet de ressource
{resource}", + "damage": "Jet de dégâts
{item}", + "attack": "Jet d'attaque
{item}", + "roll": "Lancer", + "aide": "Aider", + "gene": "Gêner", + "adversite": "Adversité", + "avantagesDesavantages": "Avantages et désavantages", + "normal": "Normal", + "avantage": "Avec avantage", + "desavantage": "Avec désavantage", + "doubleAvantage": "Avec double avantage", + "doubleDesavantage": "Avec double désavantage", + "visibilite": "Visibilité du lancer", + "success": "Réussite", + "failure": "Echec", + "resourceLost": "Ressource perdue", + "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" + }, + "Tooltip": { + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" + }, + "Setting": { + "displayOpponentMalus": "Afficher le malus d'adversité", + "displayOpponentMalusHint": "Affiche le malus d'adversité pour les joueurs.", + "fortune": "Roue de Fortune", + "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." + }, + "Chat": { + "askFortune": "{name} veut utiliser un point de Fortune !", + "askRollForAll": "Jet de {value}", + "askRollForOne": "Jet de {value} pour {name}" + }, + "Fortune": { + "title": "Roue de Fortune" + }, + "Manager": { + "title": "Gestionnaire de Personnages", + "player": "Utilisateur", + "character": "Personnage", + "rob": "Robustesse", + "dex": "Dextérité", + "int": "Intelligence", + "per": "Perception", + "vol": "Volonté", + "pv": "Points de Vie", + "san": "Santé Mentale", + "oeil": "Œil", + "verbe": "Verbe", + "bourse": "Bourse", + "magie": "Magie", + "roll": "Faire le jet" + } + } +} diff --git a/.history/lethal-fantasy_20241207081924.mjs b/.history/lethal-fantasy_20241207081924.mjs new file mode 100644 index 0000000..3016d37 --- /dev/null +++ b/.history/lethal-fantasy_20241207081924.mjs @@ -0,0 +1,204 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151149.mjs b/.history/lethal-fantasy_20241209151149.mjs new file mode 100644 index 0000000..2eab33e --- /dev/null +++ b/.history/lethal-fantasy_20241209151149.mjs @@ -0,0 +1,205 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151153.mjs b/.history/lethal-fantasy_20241209151153.mjs new file mode 100644 index 0000000..c233cf8 --- /dev/null +++ b/.history/lethal-fantasy_20241209151153.mjs @@ -0,0 +1,205 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items. + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151155.mjs b/.history/lethal-fantasy_20241209151155.mjs new file mode 100644 index 0000000..6aba864 --- /dev/null +++ b/.history/lethal-fantasy_20241209151155.mjs @@ -0,0 +1,205 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.re + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151158.mjs b/.history/lethal-fantasy_20241209151158.mjs new file mode 100644 index 0000000..cbfe6e0 --- /dev/null +++ b/.history/lethal-fantasy_20241209151158.mjs @@ -0,0 +1,205 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151200.mjs b/.history/lethal-fantasy_20241209151200.mjs new file mode 100644 index 0000000..cbfe6e0 --- /dev/null +++ b/.history/lethal-fantasy_20241209151200.mjs @@ -0,0 +1,205 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151204.mjs b/.history/lethal-fantasy_20241209151204.mjs new file mode 100644 index 0000000..b739721 --- /dev/null +++ b/.history/lethal-fantasy_20241209151204.mjs @@ -0,0 +1,206 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment, + + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151205.mjs b/.history/lethal-fantasy_20241209151205.mjs new file mode 100644 index 0000000..bce0298 --- /dev/null +++ b/.history/lethal-fantasy_20241209151205.mjs @@ -0,0 +1,206 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment, + miracle: models.LethalFantasyMir + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151206.mjs b/.history/lethal-fantasy_20241209151206.mjs new file mode 100644 index 0000000..37f201e --- /dev/null +++ b/.history/lethal-fantasy_20241209151206.mjs @@ -0,0 +1,206 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment, + miracle: models.LethalFantasyMiracle + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151207.mjs b/.history/lethal-fantasy_20241209151207.mjs new file mode 100644 index 0000000..37f201e --- /dev/null +++ b/.history/lethal-fantasy_20241209151207.mjs @@ -0,0 +1,206 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment, + miracle: models.LethalFantasyMiracle + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209151209.mjs b/.history/lethal-fantasy_20241209151209.mjs new file mode 100644 index 0000000..37f201e --- /dev/null +++ b/.history/lethal-fantasy_20241209151209.mjs @@ -0,0 +1,206 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment, + miracle: models.LethalFantasyMiracle + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241209231439.mjs b/.history/lethal-fantasy_20241209231439.mjs new file mode 100644 index 0000000..37f201e --- /dev/null +++ b/.history/lethal-fantasy_20241209231439.mjs @@ -0,0 +1,206 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment, + miracle: models.LethalFantasyMiracle + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySaveSheet, { types: ["save"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241210071333.mjs b/.history/lethal-fantasy_20241210071333.mjs new file mode 100644 index 0000000..942d012 --- /dev/null +++ b/.history/lethal-fantasy_20241210071333.mjs @@ -0,0 +1,205 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + save: models.LethalFantasySave, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment, + miracle: models.LethalFantasyMiracle + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/lethal-fantasy_20241210071338.mjs b/.history/lethal-fantasy_20241210071338.mjs new file mode 100644 index 0000000..5ddcd19 --- /dev/null +++ b/.history/lethal-fantasy_20241210071338.mjs @@ -0,0 +1,204 @@ +/** + * Lethal Fantasy RPG System + * Author: LeRatierBretonnien/Uberwald + */ + +import { SYSTEM } from "./module/config/system.mjs" +globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope + +// Import modules +import * as models from "./module/models/_module.mjs" +import * as documents from "./module/documents/_module.mjs" +import * as applications from "./module/applications/_module.mjs" + +import { handleSocketEvent } from "./module/socket.mjs" +import { Macros } from "./module/macros.mjs" +import { initControlButtons } from "./module/control-buttons.mjs" +import { setupTextEnrichers } from "./module/enrichers.mjs" + +export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} + +Hooks.once("init", function () { + console.info("Lethal Fantasy RPG | Initializing System") + console.info(SYSTEM.ASCII) + + globalThis.lethalFantasy = game.system + game.system.CONST = SYSTEM + + // Expose the system API + game.system.api = { + applications, + models, + documents, + } + + CONFIG.Actor.documentClass = documents.LethalFantasyActor + CONFIG.Actor.dataModels = { + character: models.LethalFantasyCharacter, + opponent: models.LethalFantasyOpponent, + } + + CONFIG.Item.documentClass = documents.LethalFantasyItem + CONFIG.Item.dataModels = { + skill: models.LethalFantasySkill, + gift: models.LethalFantasyGift, + weapon: models.LethalFantasyWeapon, + armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, + spell: models.LethalFantasySpell, + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment, + miracle: models.LethalFantasyMiracle + } + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true }) + Actors.registerSheet("lethalFantasy", applications.LethalFantasyOpponentSheet, { types: ["opponent"], makeDefault: true }) + + Items.unregisterSheet("core", ItemSheet) + Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) + + // Other Document Configuration + CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage + + // Dice system configuration + CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) + + game.settings.register("lethalFantasy", "worldKey", { + name: "Unique world key", + scope: "world", + config: false, + type: String, + default: "", + }) + + // Activate socket handler + game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) + + + initControlButtons() + + setupTextEnrichers() + + // Gestion des jets de dés depuis les journaux + document.addEventListener("click", (event) => { + const anchor = event.target.closest("a.ask-roll-journal") + if (!anchor) return + event.preventDefault() + event.stopPropagation() + const type = anchor.dataset.rollType + const target = anchor.dataset.rollTarget + const title = anchor.dataset.rollTitle + const avantage = anchor.dataset.rollAvantage + applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) + }) + + console.info("LETHAL FANTASY | System Initialized") +}) + +/** + * Perform one-time configuration of system configuration objects. + */ +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (let o of Object.values(obj)) { + for (let k of keys) { + o[k] = game.i18n.localize(o[k]) + } + } + } + + // CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) + + // localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"]) + // localizeConfigObject(CONFIG.Dice.rollModes, ["label"]) +} + +Hooks.once("ready", function () { + console.info("LETHAL FANTASY | Ready") + game.system.applicationManager = new applications.LethalFantasyManager() + if (game.user.isGM) { + //game.system.applicationManager.render(true) + } + + if (!SYSTEM.DEV_MODE) { + registerWorldCount("lethalFantasy") + } + _showUserGuide() + + /** + * + */ + async function _showUserGuide() { + if (game.user.isGM) { + const newVer = game.system.version + } + } +}) + +Hooks.on("renderChatMessage", (message, html, data) => { + const typeMessage = data.message.flags.lethalFantasy?.typeMessage + // Message de demande de jet de dés + if (typeMessage === "askRoll") { + // Affichage des boutons de jet de dés uniquement pour les joueurs + if (game.user.isGM) { + html.find(".ask-roll-dice").each((i, btn) => { + btn.style.display = "none" + }) + } else { + html.find(".ask-roll-dice").click((event) => { + const btn = $(event.currentTarget) + const type = btn.data("type") + const value = btn.data("value") + const avantage = btn.data("avantage") ?? "=" + const character = game.user.character + if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value) + else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage) + }) + } + } +}) + +Hooks.on("updateSetting", async (setting, update, options, id) => { +}) + +// Dice-so-nice Ready +Hooks.once("diceSoNiceReady", (dice3d) => { + configureDiceSoNice(dice3d) +}) + +/** + * Create a macro when dropping an entity on the hotbar + * Item - open roll dialog + * Actor - open actor sheet + * Journal - open journal sheet + */ +Hooks.on("hotbarDrop", (bar, data, slot) => { + if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { + Macros.createLethalFantasyMacro(data, slot); + return false + } +}) + +/** + * Register world usage statistics + * @param {string} registerKey + */ +async function registerWorldCount(registerKey) { + if (game.user.isGM) { + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } + } +} \ No newline at end of file diff --git a/.history/module/applications/_module_20241201145411.mjs b/.history/module/applications/_module_20241201145411.mjs new file mode 100644 index 0000000..f04e2b4 --- /dev/null +++ b/.history/module/applications/_module_20241201145411.mjs @@ -0,0 +1,12 @@ +export { default as LethalFantasyCharacterSheet } from "./sheets/character-sheet.mjs"; +export { default as LethalFantasyOpponentSheet } from "./sheets/opponent-sheet.mjs" +export { default as LethalFantasyWeaponSheet } from "./sheets/weapon-sheet.mjs" +export { default as LethalFantasySkillSheet } from "./sheets/skill-sheet.mjs" +export { default as LethalFantasyGiftSheet } from "./sheets/gift-sheet.mjs" +export { default as LethalFantasyVulnerabilitySheet } from "./sheets/vulnerability-sheet.mjs" +export { default as LethalFantasySaveSheet } from "./sheets/save-sheet.mjs" +export { default as LethalFantasyArmorSheet } from "./sheets/armor-sheet.mjs" +export { default as LethalFantasySpellSheet } from "./sheets/spell-sheet.mjs" +export { default as LethalFantasyEquipmentSheet } from "./sheets/equipment-sheet.mjs" +export { default as LethalFantasyShieldSheet } from "./sheets/shield-sheet.mjs" +export { default as LethalFantasyManager } from "./manager.mjs" diff --git a/.history/module/applications/_module_20241209151255.mjs b/.history/module/applications/_module_20241209151255.mjs new file mode 100644 index 0000000..8c68668 --- /dev/null +++ b/.history/module/applications/_module_20241209151255.mjs @@ -0,0 +1,13 @@ +export { default as LethalFantasyCharacterSheet } from "./sheets/character-sheet.mjs"; +export { default as LethalFantasyOpponentSheet } from "./sheets/opponent-sheet.mjs" +export { default as LethalFantasyWeaponSheet } from "./sheets/weapon-sheet.mjs" +export { default as LethalFantasySkillSheet } from "./sheets/skill-sheet.mjs" +export { default as LethalFantasyGiftSheet } from "./sheets/gift-sheet.mjs" +export { default as LethalFantasyVulnerabilitySheet } from "./sheets/vulnerability-sheet.mjs" +export { default as LethalFantasySaveSheet } from "./sheets/save-sheet.mjs" +export { default as LethalFantasyArmorSheet } from "./sheets/armor-sheet.mjs" +export { default as LethalFantasySpellSheet } from "./sheets/spell-sheet.mjs" +export { default as LethalFantasyEquipmentSheet } from "./sheets/equipment-sheet.mjs" +export { default as LethalFantasyShieldSheet } from "./sheets/shield-sheet.mjs" +export { default as LethalFantasyManager } from "./manager.mjs" + diff --git a/.history/module/applications/_module_20241209151257.mjs b/.history/module/applications/_module_20241209151257.mjs new file mode 100644 index 0000000..abee493 --- /dev/null +++ b/.history/module/applications/_module_20241209151257.mjs @@ -0,0 +1,14 @@ +export { default as LethalFantasyCharacterSheet } from "./sheets/character-sheet.mjs"; +export { default as LethalFantasyOpponentSheet } from "./sheets/opponent-sheet.mjs" +export { default as LethalFantasyWeaponSheet } from "./sheets/weapon-sheet.mjs" +export { default as LethalFantasySkillSheet } from "./sheets/skill-sheet.mjs" +export { default as LethalFantasyGiftSheet } from "./sheets/gift-sheet.mjs" +export { default as LethalFantasyVulnerabilitySheet } from "./sheets/vulnerability-sheet.mjs" +export { default as LethalFantasySaveSheet } from "./sheets/save-sheet.mjs" +export { default as LethalFantasyArmorSheet } from "./sheets/armor-sheet.mjs" +export { default as LethalFantasySpellSheet } from "./sheets/spell-sheet.mjs" +export { default as LethalFantasyEquipmentSheet } from "./sheets/equipment-sheet.mjs" +export { default as LethalFantasyShieldSheet } from "./sheets/shield-sheet.mjs" + +export { default as LethalFantasyManager } from "./manager.mjs" + diff --git a/.history/module/applications/_module_20241209151258.mjs b/.history/module/applications/_module_20241209151258.mjs new file mode 100644 index 0000000..2a93a30 --- /dev/null +++ b/.history/module/applications/_module_20241209151258.mjs @@ -0,0 +1,14 @@ +export { default as LethalFantasyCharacterSheet } from "./sheets/character-sheet.mjs"; +export { default as LethalFantasyOpponentSheet } from "./sheets/opponent-sheet.mjs" +export { default as LethalFantasyWeaponSheet } from "./sheets/weapon-sheet.mjs" +export { default as LethalFantasySkillSheet } from "./sheets/skill-sheet.mjs" +export { default as LethalFantasyGiftSheet } from "./sheets/gift-sheet.mjs" +export { default as LethalFantasyVulnerabilitySheet } from "./sheets/vulnerability-sheet.mjs" +export { default as LethalFantasySaveSheet } from "./sheets/save-sheet.mjs" +export { default as LethalFantasyArmorSheet } from "./sheets/armor-sheet.mjs" +export { default as LethalFantasySpellSheet } from "./sheets/spell-sheet.mjs" +export { default as LethalFantasyEquipmentSheet } from "./sheets/equipment-sheet.mjs" +export { default as LethalFantasyShieldSheet } from "./sheets/shield-sheet.mjs" +export { default as LethalFantasyMiracleSheet } from "./sheets/miracle-sheet.mjs" +export { default as LethalFantasyManager } from "./manager.mjs" + diff --git a/.history/module/applications/_module_20241210071442.mjs b/.history/module/applications/_module_20241210071442.mjs new file mode 100644 index 0000000..bbd149e --- /dev/null +++ b/.history/module/applications/_module_20241210071442.mjs @@ -0,0 +1,13 @@ +export { default as LethalFantasyCharacterSheet } from "./sheets/character-sheet.mjs"; +export { default as LethalFantasyOpponentSheet } from "./sheets/opponent-sheet.mjs" +export { default as LethalFantasyWeaponSheet } from "./sheets/weapon-sheet.mjs" +export { default as LethalFantasySkillSheet } from "./sheets/skill-sheet.mjs" +export { default as LethalFantasyGiftSheet } from "./sheets/gift-sheet.mjs" +export { default as LethalFantasyVulnerabilitySheet } from "./sheets/vulnerability-sheet.mjs" +export { default as LethalFantasyArmorSheet } from "./sheets/armor-sheet.mjs" +export { default as LethalFantasySpellSheet } from "./sheets/spell-sheet.mjs" +export { default as LethalFantasyEquipmentSheet } from "./sheets/equipment-sheet.mjs" +export { default as LethalFantasyShieldSheet } from "./sheets/shield-sheet.mjs" +export { default as LethalFantasyMiracleSheet } from "./sheets/miracle-sheet.mjs" +export { default as LethalFantasyManager } from "./manager.mjs" + diff --git a/.history/module/applications/sheets/armor-sheet_20241121235703.mjs b/.history/module/applications/sheets/armor-sheet_20241121235703.mjs new file mode 100644 index 0000000..6be8a08 --- /dev/null +++ b/.history/module/applications/sheets/armor-sheet_20241121235703.mjs @@ -0,0 +1,27 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyArmorSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["armor"], + position: { + width: 400, + }, + window: { + contentClasses: ["armor-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/armor.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + return context + } +} diff --git a/.history/module/applications/sheets/armor-sheet_20241210071050.mjs b/.history/module/applications/sheets/armor-sheet_20241210071050.mjs new file mode 100644 index 0000000..f125985 --- /dev/null +++ b/.history/module/applications/sheets/armor-sheet_20241210071050.mjs @@ -0,0 +1,22 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyArmorSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["armor"], + position: { + width: 400, + }, + window: { + contentClasses: ["armor-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/armor.hbs", + }, + } + +} diff --git a/.history/module/applications/sheets/armor-sheet_20241210072306.mjs b/.history/module/applications/sheets/armor-sheet_20241210072306.mjs new file mode 100644 index 0000000..48b2ec9 --- /dev/null +++ b/.history/module/applications/sheets/armor-sheet_20241210072306.mjs @@ -0,0 +1,30 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyArmorSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["armor"], + position: { + width: 400, + }, + window: { + contentClasses: ["armor-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/armor.hbs", + }, + } + + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/applications/sheets/armor-sheet_20241210072307.mjs b/.history/module/applications/sheets/armor-sheet_20241210072307.mjs new file mode 100644 index 0000000..3119274 --- /dev/null +++ b/.history/module/applications/sheets/armor-sheet_20241210072307.mjs @@ -0,0 +1,30 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyArmorSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["armor"], + position: { + width: 400, + }, + window: { + contentClasses: ["armor-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/armor.hbs", + }, + } + + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/applications/sheets/character-sheet_20241207085714.mjs b/.history/module/applications/sheets/character-sheet_20241207085714.mjs new file mode 100644 index 0000000..6a37ab5 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241207085714.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153603.mjs b/.history/module/applications/sheets/character-sheet_20241208153603.mjs new file mode 100644 index 0000000..5d3cd93 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153603.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153604.mjs b/.history/module/applications/sheets/character-sheet_20241208153604.mjs new file mode 100644 index 0000000..6a37ab5 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153604.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153607.mjs b/.history/module/applications/sheets/character-sheet_20241208153607.mjs new file mode 100644 index 0000000..755ad17 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153607.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153608.mjs b/.history/module/applications/sheets/character-sheet_20241208153608.mjs new file mode 100644 index 0000000..755ad17 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153608.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153649.mjs b/.history/module/applications/sheets/character-sheet_20241208153649.mjs new file mode 100644 index 0000000..e363eb4 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153649.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153652.mjs b/.history/module/applications/sheets/character-sheet_20241208153652.mjs new file mode 100644 index 0000000..0678e76 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153652.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: " 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153655.mjs b/.history/module/applications/sheets/character-sheet_20241208153655.mjs new file mode 100644 index 0000000..e486d2a --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153655.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153656.mjs b/.history/module/applications/sheets/character-sheet_20241208153656.mjs new file mode 100644 index 0000000..e486d2a --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153656.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208153657.mjs b/.history/module/applications/sheets/character-sheet_20241208153657.mjs new file mode 100644 index 0000000..e486d2a --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208153657.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154229.mjs b/.history/module/applications/sheets/character-sheet_20241208154229.mjs new file mode 100644 index 0000000..be61a29 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154229.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spells + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154230.mjs b/.history/module/applications/sheets/character-sheet_20241208154230.mjs new file mode 100644 index 0000000..e486d2a --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154230.mjs @@ -0,0 +1,194 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154238.mjs b/.history/module/applications/sheets/character-sheet_20241208154238.mjs new file mode 100644 index 0000000..703d05e --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154238.mjs @@ -0,0 +1,195 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.weapons + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154242.mjs b/.history/module/applications/sheets/character-sheet_20241208154242.mjs new file mode 100644 index 0000000..3077a74 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154242.mjs @@ -0,0 +1,195 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154244.mjs b/.history/module/applications/sheets/character-sheet_20241208154244.mjs new file mode 100644 index 0000000..3077a74 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154244.mjs @@ -0,0 +1,195 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154246.mjs b/.history/module/applications/sheets/character-sheet_20241208154246.mjs new file mode 100644 index 0000000..674fd2d --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154246.mjs @@ -0,0 +1,195 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weaponss + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154249.mjs b/.history/module/applications/sheets/character-sheet_20241208154249.mjs new file mode 100644 index 0000000..3077a74 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154249.mjs @@ -0,0 +1,195 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154525.mjs b/.history/module/applications/sheets/character-sheet_20241208154525.mjs new file mode 100644 index 0000000..72b552d --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154525.mjs @@ -0,0 +1,196 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + break; + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154526.mjs b/.history/module/applications/sheets/character-sheet_20241208154526.mjs new file mode 100644 index 0000000..72b552d --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154526.mjs @@ -0,0 +1,196 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + break; + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154527.mjs b/.history/module/applications/sheets/character-sheet_20241208154527.mjs new file mode 100644 index 0000000..72b552d --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154527.mjs @@ -0,0 +1,196 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + break; + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154528.mjs b/.history/module/applications/sheets/character-sheet_20241208154528.mjs new file mode 100644 index 0000000..72b552d --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154528.mjs @@ -0,0 +1,196 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + break; + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/character-sheet_20241208154530.mjs b/.history/module/applications/sheets/character-sheet_20241208154530.mjs new file mode 100644 index 0000000..4ad4676 --- /dev/null +++ b/.history/module/applications/sheets/character-sheet_20241208154530.mjs @@ -0,0 +1,196 @@ +import LethalFantasyActorSheet from "./base-actor-sheet.mjs" +import { ROLL_TYPE } from "../../config/system.mjs" + +export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["character"], + position: { + width: 1150, + height: 780, + }, + window: { + contentClasses: ["character-content"], + }, + actions: { + createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", + }, + tabs: { + template: "templates/generic/tab-navigation.hbs", + }, + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", + }, + biography: { + template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", + }, + } + + /** @override */ + tabGroups = { + sheet: "skills", + } + + /** + * Prepare an array of form header tabs. + * @returns {Record>} + */ + #getTabs() { + const tabs = { + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, + } + for (const v of Object.values(tabs)) { + v.active = this.tabGroups[v.group] === v.id + v.cssClass = v.active ? "active" : "" + } + return tabs + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.tabs = this.#getTabs() + + context.tooltipsCaracteristiques = { + } + + context.tooltipsRessources = { + } + + context.rollType = { + } + return context + } + + _generateTooltip(type, target) { + } + + /** @override */ + async _preparePartContext(partId, context) { + const doc = this.document + switch (partId) { + case "main": + break + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells + context.spells = doc.itemTypes.spell + context.hasSpells = context.spells.length > 0 + break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + break + case "biography": + context.tab = context.tabs.biography + context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) + context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + break + } + return context + } + + // #region Drag-and-Drop Workflow + + /** + * Callback actions which occur when a dragged element is dropped on a target. + * @param {DragEvent} event The originating DragEvent + * @protected + */ + async _onDrop(event) { + if (!this.isEditable || !this.isEditMode) return + const data = TextEditor.getDragEventData(event) + + // Handle different data types + switch (data.type) { + case "Item": + const item = await fromUuid(data.uuid) + return this._onDropItem(item) + } + } + + async #onDropPathItem(item) { + await this.document.addPath(item) + } + + + /** + * Creates a new attack item directly from the sheet and embeds it into the document. + * @param {Event} event The initiating click event. + * @param {HTMLElement} target The current target of the event listener. + */ + static #onCreateEquipment(event, target) { + // Création d'une armure + if (event.shiftKey) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) + } + // Création d'une arme + else { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) + } + } + + /** + * Handles the roll action triggered by user interaction. + * + * @param {PointerEvent} event The event object representing the user interaction. + * @param {HTMLElement} target The target element that triggered the roll. + * + * @returns {Promise} A promise that resolves when the roll action is complete. + * + * @throws {Error} Throws an error if the roll type is not recognized. + * + * @description This method checks the current mode (edit or not) and determines the type of roll + * (save, resource, or damage) based on the target element's data attributes. It retrieves the + * corresponding value from the document's system and performs the roll. + */ + async _onRoll(event, target) { + if (this.isEditMode) return + // Jet de sauvegarde + let elt = event.currentTarget.querySelector("input") + // Jet de ressource + if (!elt) elt = event.currentTarget.querySelector("select") + // Jet de dégâts + if (!elt) elt = event.currentTarget + const rollType = elt.dataset.rollType + let rollTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.RESOURCE: + rollTarget = elt.dataset.rollTarget + break + case ROLL_TYPE.DAMAGE: + rollTarget = elt.dataset.itemId + break + default: + break + } + await this.document.system.roll(rollType, rollTarget) + } + // #endregion +} diff --git a/.history/module/applications/sheets/equipment-sheet_20241130083352.mjs b/.history/module/applications/sheets/equipment-sheet_20241130083352.mjs new file mode 100644 index 0000000..ea87928 --- /dev/null +++ b/.history/module/applications/sheets/equipment-sheet_20241130083352.mjs @@ -0,0 +1,27 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyEquipmentSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["equipment"], + position: { + width: 600, + }, + window: { + contentClasses: ["equipment-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/equipment.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + return context + } +} diff --git a/.history/module/applications/sheets/equipment-sheet_20241210072300.mjs b/.history/module/applications/sheets/equipment-sheet_20241210072300.mjs new file mode 100644 index 0000000..dbeb156 --- /dev/null +++ b/.history/module/applications/sheets/equipment-sheet_20241210072300.mjs @@ -0,0 +1,28 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyEquipmentSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["equipment"], + position: { + width: 600, + }, + window: { + contentClasses: ["equipment-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/equipment.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151222.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151222.mjs new file mode 100644 index 0000000..e69de29 diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151225.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151225.mjs new file mode 100644 index 0000000..c5468d2 --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151225.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasySpellSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151230.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151230.mjs new file mode 100644 index 0000000..3db9894 --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151230.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151231.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151231.mjs new file mode 100644 index 0000000..3db9894 --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151231.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151234.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151234.mjs new file mode 100644 index 0000000..770356f --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151234.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151237.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151237.mjs new file mode 100644 index 0000000..a538692 --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151237.mjs @@ -0,0 +1,22 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: [" classes: ["miracle"], +-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151239.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151239.mjs new file mode 100644 index 0000000..3db9894 --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151239.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151241.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151241.mjs new file mode 100644 index 0000000..770356f --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151241.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151244.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151244.mjs new file mode 100644 index 0000000..551a46f --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151244.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["miracle-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209151245.mjs b/.history/module/applications/sheets/miracle-sheet_20241209151245.mjs new file mode 100644 index 0000000..d3816ce --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209151245.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["miracle-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/miracle.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209231624.mjs b/.history/module/applications/sheets/miracle-sheet_20241209231624.mjs new file mode 100644 index 0000000..d3816ce --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209231624.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["miracle-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/miracle.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209231625.mjs b/.history/module/applications/sheets/miracle-sheet_20241209231625.mjs new file mode 100644 index 0000000..d3816ce --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209231625.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["miracle-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/miracle.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241209231626.mjs b/.history/module/applications/sheets/miracle-sheet_20241209231626.mjs new file mode 100644 index 0000000..d3816ce --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241209231626.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["miracle-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/miracle.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241210072248.mjs b/.history/module/applications/sheets/miracle-sheet_20241210072248.mjs new file mode 100644 index 0000000..39009e2 --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241210072248.mjs @@ -0,0 +1,29 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["miracle-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/miracle.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/applications/sheets/miracle-sheet_20241210072251.mjs b/.history/module/applications/sheets/miracle-sheet_20241210072251.mjs new file mode 100644 index 0000000..e9b4afe --- /dev/null +++ b/.history/module/applications/sheets/miracle-sheet_20241210072251.mjs @@ -0,0 +1,29 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["miracle-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/miracle.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/applications/sheets/shield-sheet_20241203125805.mjs b/.history/module/applications/sheets/shield-sheet_20241203125805.mjs new file mode 100644 index 0000000..46e876e --- /dev/null +++ b/.history/module/applications/sheets/shield-sheet_20241203125805.mjs @@ -0,0 +1,27 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyShieldSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["shield"], + position: { + width: 620, + }, + window: { + contentClasses: ["shield-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/shield.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + return context + } +} diff --git a/.history/module/applications/sheets/shield-sheet_20241210072243.mjs b/.history/module/applications/sheets/shield-sheet_20241210072243.mjs new file mode 100644 index 0000000..30bc6df --- /dev/null +++ b/.history/module/applications/sheets/shield-sheet_20241210072243.mjs @@ -0,0 +1,28 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyShieldSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["shield"], + position: { + width: 620, + }, + window: { + contentClasses: ["shield-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/shield.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } +} diff --git a/.history/module/applications/sheets/spell-sheet_20241121235722.mjs b/.history/module/applications/sheets/spell-sheet_20241121235722.mjs new file mode 100644 index 0000000..c5468d2 --- /dev/null +++ b/.history/module/applications/sheets/spell-sheet_20241121235722.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasySpellSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/spell-sheet_20241210072209.mjs b/.history/module/applications/sheets/spell-sheet_20241210072209.mjs new file mode 100644 index 0000000..3b6394b --- /dev/null +++ b/.history/module/applications/sheets/spell-sheet_20241210072209.mjs @@ -0,0 +1,29 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasySpellSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/applications/sheets/spell-sheet_20241210072211.mjs b/.history/module/applications/sheets/spell-sheet_20241210072211.mjs new file mode 100644 index 0000000..de7237c --- /dev/null +++ b/.history/module/applications/sheets/spell-sheet_20241210072211.mjs @@ -0,0 +1,29 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasySpellSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { + width: 450, + }, + window: { + contentClasses: ["spell-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/spell.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/applications/sheets/weapon-sheet_20241203131225.mjs b/.history/module/applications/sheets/weapon-sheet_20241203131225.mjs new file mode 100644 index 0000000..2c5d0f5 --- /dev/null +++ b/.history/module/applications/sheets/weapon-sheet_20241203131225.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyWeaponSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["weapon"], + position: { + width: 620, + }, + window: { + contentClasses: ["weapon-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/weapon.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/weapon-sheet_20241210071054.mjs b/.history/module/applications/sheets/weapon-sheet_20241210071054.mjs new file mode 100644 index 0000000..2c5d0f5 --- /dev/null +++ b/.history/module/applications/sheets/weapon-sheet_20241210071054.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyWeaponSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["weapon"], + position: { + width: 620, + }, + window: { + contentClasses: ["weapon-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/weapon.hbs", + }, + } +} diff --git a/.history/module/applications/sheets/weapon-sheet_20241210072223.mjs b/.history/module/applications/sheets/weapon-sheet_20241210072223.mjs new file mode 100644 index 0000000..e443bd0 --- /dev/null +++ b/.history/module/applications/sheets/weapon-sheet_20241210072223.mjs @@ -0,0 +1,28 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyWeaponSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["weapon"], + position: { + width: 620, + }, + window: { + contentClasses: ["weapon-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/weapon.hbs", + }, + } + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/applications/sheets/weapon-sheet_20241210072225.mjs b/.history/module/applications/sheets/weapon-sheet_20241210072225.mjs new file mode 100644 index 0000000..c2119a6 --- /dev/null +++ b/.history/module/applications/sheets/weapon-sheet_20241210072225.mjs @@ -0,0 +1,28 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyWeaponSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["weapon"], + position: { + width: 620, + }, + window: { + contentClasses: ["weapon-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/weapon.hbs", + }, + } + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/applications/sheets/weapon-sheet_20241210072235.mjs b/.history/module/applications/sheets/weapon-sheet_20241210072235.mjs new file mode 100644 index 0000000..a8f8672 --- /dev/null +++ b/.history/module/applications/sheets/weapon-sheet_20241210072235.mjs @@ -0,0 +1,29 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyWeaponSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["weapon"], + position: { + width: 620, + }, + window: { + contentClasses: ["weapon-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/weapon.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } + +} diff --git a/.history/module/config/character_20241207091147.mjs b/.history/module/config/character_20241207091147.mjs new file mode 100644 index 0000000..dfb3b4b --- /dev/null +++ b/.history/module/config/character_20241207091147.mjs @@ -0,0 +1,61 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075220.mjs b/.history/module/config/character_20241210075220.mjs new file mode 100644 index 0000000..5846e83 --- /dev/null +++ b/.history/module/config/character_20241210075220.mjs @@ -0,0 +1,74 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075222.mjs b/.history/module/config/character_20241210075222.mjs new file mode 100644 index 0000000..120149b --- /dev/null +++ b/.history/module/config/character_20241210075222.mjs @@ -0,0 +1,74 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, +} +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075224.mjs b/.history/module/config/character_20241210075224.mjs new file mode 100644 index 0000000..8539458 --- /dev/null +++ b/.history/module/config/character_20241210075224.mjs @@ -0,0 +1,75 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +} + +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075228.mjs b/.history/module/config/character_20241210075228.mjs new file mode 100644 index 0000000..7d1824d --- /dev/null +++ b/.history/module/config/character_20241210075228.mjs @@ -0,0 +1,75 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +} + +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075229.mjs b/.history/module/config/character_20241210075229.mjs new file mode 100644 index 0000000..7d1824d --- /dev/null +++ b/.history/module/config/character_20241210075229.mjs @@ -0,0 +1,75 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +} + +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075231.mjs b/.history/module/config/character_20241210075231.mjs new file mode 100644 index 0000000..7d1824d --- /dev/null +++ b/.history/module/config/character_20241210075231.mjs @@ -0,0 +1,75 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +} + +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075236.mjs b/.history/module/config/character_20241210075236.mjs new file mode 100644 index 0000000..7a5e8dc --- /dev/null +++ b/.history/module/config/character_20241210075236.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +} + +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075238.mjs b/.history/module/config/character_20241210075238.mjs new file mode 100644 index 0000000..3635261 --- /dev/null +++ b/.history/module/config/character_20241210075238.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + }, + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075243.mjs b/.history/module/config/character_20241210075243.mjs new file mode 100644 index 0000000..2eaf8e1 --- /dev/null +++ b/.history/module/config/character_20241210075243.mjs @@ -0,0 +1,64 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075254.mjs b/.history/module/config/character_20241210075254.mjs new file mode 100644 index 0000000..175f704 --- /dev/null +++ b/.history/module/config/character_20241210075254.mjs @@ -0,0 +1,68 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075256.mjs b/.history/module/config/character_20241210075256.mjs new file mode 100644 index 0000000..802bddd --- /dev/null +++ b/.history/module/config/character_20241210075256.mjs @@ -0,0 +1,68 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075300.mjs b/.history/module/config/character_20241210075300.mjs new file mode 100644 index 0000000..19522ec --- /dev/null +++ b/.history/module/config/character_20241210075300.mjs @@ -0,0 +1,68 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075305.mjs b/.history/module/config/character_20241210075305.mjs new file mode 100644 index 0000000..ef71da4 --- /dev/null +++ b/.history/module/config/character_20241210075305.mjs @@ -0,0 +1,68 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.toughness.label" + } +}) diff --git a/.history/module/config/character_20241210075306.mjs b/.history/module/config/character_20241210075306.mjs new file mode 100644 index 0000000..92d90da --- /dev/null +++ b/.history/module/config/character_20241210075306.mjs @@ -0,0 +1,68 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + } +}) diff --git a/.history/module/config/character_20241210075311.mjs b/.history/module/config/character_20241210075311.mjs new file mode 100644 index 0000000..3e45721 --- /dev/null +++ b/.history/module/config/character_20241210075311.mjs @@ -0,0 +1,72 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + } + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + } +}) diff --git a/.history/module/config/character_20241210075313.mjs b/.history/module/config/character_20241210075313.mjs new file mode 100644 index 0000000..af49123 --- /dev/null +++ b/.history/module/config/character_20241210075313.mjs @@ -0,0 +1,72 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + } +}) diff --git a/.history/module/config/character_20241210075316.mjs b/.history/module/config/character_20241210075316.mjs new file mode 100644 index 0000000..3c7e958 --- /dev/null +++ b/.history/module/config/character_20241210075316.mjs @@ -0,0 +1,72 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + } +}) diff --git a/.history/module/config/character_20241210075321.mjs b/.history/module/config/character_20241210075321.mjs new file mode 100644 index 0000000..8514aa0 --- /dev/null +++ b/.history/module/config/character_20241210075321.mjs @@ -0,0 +1,72 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "contagion", + label: "LETHALFANTASY.Character.poison.label" + } +}) diff --git a/.history/module/config/character_20241210075323.mjs b/.history/module/config/character_20241210075323.mjs new file mode 100644 index 0000000..6afa9df --- /dev/null +++ b/.history/module/config/character_20241210075323.mjs @@ -0,0 +1,72 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + } +}) diff --git a/.history/module/config/character_20241210075331.mjs b/.history/module/config/character_20241210075331.mjs new file mode 100644 index 0000000..9702fa8 --- /dev/null +++ b/.history/module/config/character_20241210075331.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + } + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + } +}) diff --git a/.history/module/config/character_20241210075333.mjs b/.history/module/config/character_20241210075333.mjs new file mode 100644 index 0000000..01dad70 --- /dev/null +++ b/.history/module/config/character_20241210075333.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + } +}) diff --git a/.history/module/config/character_20241210075336.mjs b/.history/module/config/character_20241210075336.mjs new file mode 100644 index 0000000..758d50c --- /dev/null +++ b/.history/module/config/character_20241210075336.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + }, + pain: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + } +}) diff --git a/.history/module/config/character_20241210075339.mjs b/.history/module/config/character_20241210075339.mjs new file mode 100644 index 0000000..aa949d4 --- /dev/null +++ b/.history/module/config/character_20241210075339.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + }, + pain: { + id: "pain", + label: "LETHALFANTASY.Character.poison.label" + } +}) diff --git a/.history/module/config/character_20241210075341.mjs b/.history/module/config/character_20241210075341.mjs new file mode 100644 index 0000000..d4547cc --- /dev/null +++ b/.history/module/config/character_20241210075341.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + }, + pain: { + id: "pain", + label: "LETHALFANTASY.Character.pain.label" + } +}) diff --git a/.history/module/config/character_20241210075630.mjs b/.history/module/config/character_20241210075630.mjs new file mode 100644 index 0000000..d4547cc --- /dev/null +++ b/.history/module/config/character_20241210075630.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHLLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + }, + pain: { + id: "pain", + label: "LETHALFANTASY.Character.pain.label" + } +}) diff --git a/.history/module/config/character_20241210173254.mjs b/.history/module/config/character_20241210173254.mjs new file mode 100644 index 0000000..708c98c --- /dev/null +++ b/.history/module/config/character_20241210173254.mjs @@ -0,0 +1,76 @@ +export const CHARACTERISTICS = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Label.str" + }, + int: { + id: "int", + label: "LETHALFANTASY.Character.int.label" + }, + wis: { + id: "wis", + label: "LETHALFANTASY.Character.wis.label" + }, + dex: { + id: "dex", + label: "LETHALFANTASY.Character.dex.label" + }, + con: { + id: "con", + label: "LETHALFANTASY.Character.con.label" + }, + cha: { + id: "cha", + label: "LETHALFANTASY.Character.cha.label" + }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, + app: { + id: "app", + label: "LETHALFANTASY.Character.app.label" + }, +}) + +export const CHALLENGES = Object.freeze({ + str: { + id: "str", + label: "LETHALFANTASY.Character.str.label" + }, + agility: { + id: "agility", + label: "LETHALFANTASY.Character.agility.label" + }, + dying: { + id: "dying", + label: "LETHALFANTASY.Character.dying.label" + } +}) + +export const SAVES = Object.freeze({ + will: { + id: "will", + label: "LETHALFANTASY.Character.will.label" + }, + dodge: { + id: "dodge", + label: "LETHALFANTASY.Character.dodge.label" + }, + toughness: { + id: "toughness", + label: "LETHALFANTASY.Character.toughness.label" + }, + contagion: { + id: "contagion", + label: "LETHALFANTASY.Character.contagion.label" + }, + poison: { + id: "poison", + label: "LETHALFANTASY.Character.poison.label" + }, + pain: { + id: "pain", + label: "LETHALFANTASY.Character.pain.label" + } +}) diff --git a/.history/module/config/characteristic-tables_20241208161354.mjs b/.history/module/config/characteristic-tables_20241208161354.mjs new file mode 100644 index 0000000..e69de29 diff --git a/.history/module/config/characteristic-tables_20241208161403.mjs b/.history/module/config/characteristic-tables_20241208161403.mjs new file mode 100644 index 0000000..1f5d640 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161403.mjs @@ -0,0 +1 @@ +export \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161404.mjs b/.history/module/config/characteristic-tables_20241208161404.mjs new file mode 100644 index 0000000..42151f0 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161404.mjs @@ -0,0 +1 @@ +export \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161410.mjs b/.history/module/config/characteristic-tables_20241208161410.mjs new file mode 100644 index 0000000..f2d24e7 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161410.mjs @@ -0,0 +1,3 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161416.mjs b/.history/module/config/characteristic-tables_20241208161416.mjs new file mode 100644 index 0000000..b8fe858 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161416.mjs @@ -0,0 +1,3 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161418.mjs b/.history/module/config/characteristic-tables_20241208161418.mjs new file mode 100644 index 0000000..3aab5ab --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161418.mjs @@ -0,0 +1,5 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161422.mjs b/.history/module/config/characteristic-tables_20241208161422.mjs new file mode 100644 index 0000000..f935927 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161422.mjs @@ -0,0 +1,5 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + "STR": {} +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161426.mjs b/.history/module/config/characteristic-tables_20241208161426.mjs new file mode 100644 index 0000000..b2c6d77 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161426.mjs @@ -0,0 +1,5 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + "str": {} +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161427.mjs b/.history/module/config/characteristic-tables_20241208161427.mjs new file mode 100644 index 0000000..3571346 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161427.mjs @@ -0,0 +1,5 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + "str": +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161447.mjs b/.history/module/config/characteristic-tables_20241208161447.mjs new file mode 100644 index 0000000..647528a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161447.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + "str": [ + { + "STRENGTH": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "STRENGTH": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "STRENGTH": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "STRENGTH": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "STRENGTH": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "STRENGTH": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "STRENGTH": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "STRENGTH": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "STRENGTH": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "STRENGTH": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "STRENGTH": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "STRENGTH": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "STRENGTH": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "STRENGTH": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "STRENGTH": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "STRENGTH": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "STRENGTH": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "STRENGTH": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "STRENGTH": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "STRENGTH": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "STRENGTH": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "STRENGTH": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "STRENGTH": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "STRENGTH": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "STRENGTH": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161448.mjs b/.history/module/config/characteristic-tables_20241208161448.mjs new file mode 100644 index 0000000..647528a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161448.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + "str": [ + { + "STRENGTH": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "STRENGTH": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "STRENGTH": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "STRENGTH": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "STRENGTH": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "STRENGTH": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "STRENGTH": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "STRENGTH": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "STRENGTH": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "STRENGTH": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "STRENGTH": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "STRENGTH": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "STRENGTH": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "STRENGTH": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "STRENGTH": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "STRENGTH": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "STRENGTH": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "STRENGTH": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "STRENGTH": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "STRENGTH": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "STRENGTH": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "STRENGTH": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "STRENGTH": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "STRENGTH": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "STRENGTH": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161450.mjs b/.history/module/config/characteristic-tables_20241208161450.mjs new file mode 100644 index 0000000..647528a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161450.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + "str": [ + { + "STRENGTH": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "STRENGTH": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "STRENGTH": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "STRENGTH": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "STRENGTH": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "STRENGTH": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "STRENGTH": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "STRENGTH": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "STRENGTH": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "STRENGTH": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "STRENGTH": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "STRENGTH": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "STRENGTH": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "STRENGTH": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "STRENGTH": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "STRENGTH": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "STRENGTH": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "STRENGTH": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "STRENGTH": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "STRENGTH": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "STRENGTH": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "STRENGTH": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "STRENGTH": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "STRENGTH": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "STRENGTH": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161451.mjs b/.history/module/config/characteristic-tables_20241208161451.mjs new file mode 100644 index 0000000..647528a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161451.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + "str": [ + { + "STRENGTH": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "STRENGTH": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "STRENGTH": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "STRENGTH": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "STRENGTH": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "STRENGTH": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "STRENGTH": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "STRENGTH": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "STRENGTH": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "STRENGTH": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "STRENGTH": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "STRENGTH": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "STRENGTH": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "STRENGTH": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "STRENGTH": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "STRENGTH": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "STRENGTH": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "STRENGTH": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "STRENGTH": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "STRENGTH": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "STRENGTH": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "STRENGTH": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "STRENGTH": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "STRENGTH": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "STRENGTH": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161452.mjs b/.history/module/config/characteristic-tables_20241208161452.mjs new file mode 100644 index 0000000..647528a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161452.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export CHARACTERISTICS_TABLES = { + "str": [ + { + "STRENGTH": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "STRENGTH": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "STRENGTH": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "STRENGTH": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "STRENGTH": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "STRENGTH": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "STRENGTH": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "STRENGTH": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "STRENGTH": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "STRENGTH": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "STRENGTH": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "STRENGTH": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "STRENGTH": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "STRENGTH": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "STRENGTH": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "STRENGTH": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "STRENGTH": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "STRENGTH": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "STRENGTH": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "STRENGTH": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "STRENGTH": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "STRENGTH": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "STRENGTH": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "STRENGTH": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "STRENGTH": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161501.mjs b/.history/module/config/characteristic-tables_20241208161501.mjs new file mode 100644 index 0000000..f32c0ef --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161501.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "STRENGTH": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "STRENGTH": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "STRENGTH": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "STRENGTH": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "STRENGTH": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "STRENGTH": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "STRENGTH": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "STRENGTH": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "STRENGTH": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "STRENGTH": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "STRENGTH": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "STRENGTH": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "STRENGTH": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "STRENGTH": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "STRENGTH": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "STRENGTH": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "STRENGTH": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "STRENGTH": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "STRENGTH": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "STRENGTH": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "STRENGTH": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "STRENGTH": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "STRENGTH": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "STRENGTH": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "STRENGTH": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161535.mjs b/.history/module/config/characteristic-tables_20241208161535.mjs new file mode 100644 index 0000000..d042b53 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161535.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF value": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF value": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF value": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF value": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF value": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF value": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF value": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF value": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF value": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF value": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF value": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF value": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF value": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF value": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF value": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF value": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF value": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF value": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF value": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF value": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF value": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF value": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF value": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF value": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF value": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161544.mjs b/.history/module/config/characteristic-tables_20241208161544.mjs new file mode 100644 index 0000000..f32c0ef --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161544.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "STRENGTH": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "STRENGTH": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "STRENGTH": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "STRENGTH": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "STRENGTH": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "STRENGTH": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "STRENGTH": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "STRENGTH": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "STRENGTH": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "STRENGTH": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "STRENGTH": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "STRENGTH": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "STRENGTH": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "STRENGTH": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "STRENGTH": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "STRENGTH": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "STRENGTH": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "STRENGTH": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "STRENGTH": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "STRENGTH": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "STRENGTH": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "STRENGTH": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "STRENGTH": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "STRENGTH": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "STRENGTH": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161557.mjs b/.history/module/config/characteristic-tables_20241208161557.mjs new file mode 100644 index 0000000..813c5f3 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161557.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "DAMAGE MODIFIER": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "DAMAGE MODIFIER": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "DAMAGE MODIFIER": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "DAMAGE MODIFIER": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "DAMAGE MODIFIER": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "DAMAGE MODIFIER": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "DAMAGE MODIFIER": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "DAMAGE MODIFIER": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "DAMAGE MODIFIER": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "DAMAGE MODIFIER": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "DAMAGE MODIFIER": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "DAMAGE MODIFIER": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "DAMAGE MODIFIER": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "DAMAGE MODIFIER": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "DAMAGE MODIFIER": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "DAMAGE MODIFIER": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "DAMAGE MODIFIER": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "DAMAGE MODIFIER": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "DAMAGE MODIFIER": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "DAMAGE MODIFIER": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "DAMAGE MODIFIER": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161607.mjs b/.history/module/config/characteristic-tables_20241208161607.mjs new file mode 100644 index 0000000..16419a1 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161607.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "ATTACK MODIFIER": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "ATTACK MODIFIER": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "ATTACK MODIFIER": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "ATTACK MODIFIER": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "ATTACK MODIFIER": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "ATTACK MODIFIER": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "ATTACK MODIFIER": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "ATTACK MODIFIER": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "ATTACK MODIFIER": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "ATTACK MODIFIER": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "ATTACK MODIFIER": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161620.mjs b/.history/module/config/characteristic-tables_20241208161620.mjs new file mode 100644 index 0000000..f1ddd55 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161620.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "CHALLENGE OF STRENGTH": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "CHALLENGE OF STRENGTH": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "CHALLENGE OF STRENGTH": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "CHALLENGE OF STRENGTH": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "CHALLENGE OF STRENGTH": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "CHALLENGE OF STRENGTH": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "CHALLENGE OF STRENGTH": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "CHALLENGE OF STRENGTH": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "CHALLENGE OF STRENGTH": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "CHALLENGE OF STRENGTH": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "CHALLENGE OF STRENGTH": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "CHALLENGE OF STRENGTH": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "CHALLENGE OF STRENGTH": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "CHALLENGE OF STRENGTH": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "CHALLENGE OF STRENGTH": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "CHALLENGE OF STRENGTH": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "CHALLENGE OF STRENGTH": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "CHALLENGE OF STRENGTH": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "CHALLENGE OF STRENGTH": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "CHALLENGE OF STRENGTH": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "CHALLENGE OF STRENGTH": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "CHALLENGE OF STRENGTH": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "CHALLENGE OF STRENGTH": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "CHALLENGE OF STRENGTH": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161629.mjs b/.history/module/config/characteristic-tables_20241208161629.mjs new file mode 100644 index 0000000..df442ff --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161629.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "AETHER POINTS": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "AETHER POINTS": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "AETHER POINTS": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "AETHER POINTS": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "AETHER POINTS": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "AETHER POINTS": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "AETHER POINTS": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "AETHER POINTS": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "AETHER POINTS": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "AETHER POINTS": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "AETHER POINTS": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "AETHER POINTS": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "AETHER POINTS": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "AETHER POINTS": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "AETHER POINTS": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "AETHER POINTS": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "AETHER POINTS": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "AETHER POINTS": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161643.mjs b/.history/module/config/characteristic-tables_20241208161643.mjs new file mode 100644 index 0000000..7dc4445 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161643.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "HIT POINTS": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "HIT POINTS": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "HIT POINTS": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "HIT POINTS": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "HIT POINTS": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "HIT POINTS": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "HIT POINTS": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "HIT POINTS": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "HIT POINTS": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "HIT POINTS": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "HIT POINTS": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "HIT POINTS": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "HIT POINTS": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "HIT POINTS": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "HIT POINTS": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "HIT POINTS": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "HIT POINTS": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "HIT POINTS": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "HIT POINTS": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "HIT POINTS": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "HIT POINTS": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "HIT POINTS": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "HIT POINTS": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "HIT POINTS": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161653.mjs b/.history/module/config/characteristic-tables_20241208161653.mjs new file mode 100644 index 0000000..7574c67 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161653.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "ENCUMBERED": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "ENCUMBERED": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "ENCUMBERED": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "ENCUMBERED": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "ENCUMBERED": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "ENCUMBERED": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "ENCUMBERED": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "ENCUMBERED": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "ENCUMBERED": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "ENCUMBERED": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "ENCUMBERED": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "ENCUMBERED": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "ENCUMBERED": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "ENCUMBERED": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "ENCUMBERED": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "ENCUMBERED": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "ENCUMBERED": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "ENCUMBERED": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "ENCUMBERED": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "ENCUMBERED": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "ENCUMBERED": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "ENCUMBERED": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "ENCUMBERED": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "ENCUMBERED": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "ENCUMBERED": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161701.mjs b/.history/module/config/characteristic-tables_20241208161701.mjs new file mode 100644 index 0000000..17aaaf7 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161701.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "LIFT": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "LIFT": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "LIFT": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "LIFT": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "LIFT": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "LIFT": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "LIFT": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "LIFT": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "LIFT": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "LIFT": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "LIFT": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "LIFT": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "LIFT": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "LIFT": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "LIFT": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "LIFT": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "LIFT": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "LIFT": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "LIFT": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "LIFT": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "LIFT": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "LIFT": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "LIFT": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "LIFT": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "LIFT": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161708.mjs b/.history/module/config/characteristic-tables_20241208161708.mjs new file mode 100644 index 0000000..da8a442 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161708.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "PUSH/DRAG": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "PUSH/DRAG": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "PUSH/DRAG": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "PUSH/DRAG": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "PUSH/DRAG": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "PUSH/DRAG": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "PUSH/DRAG": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "PUSH/DRAG": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "PUSH/DRAG": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "PUSH/DRAG": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "PUSH/DRAG": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "PUSH/DRAG": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "PUSH/DRAG": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "PUSH/DRAG": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "PUSH/DRAG": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "PUSH/DRAG": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "PUSH/DRAG": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "PUSH/DRAG": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "PUSH/DRAG": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "PUSH/DRAG": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "PUSH/DRAG": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "PUSH/DRAG": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "PUSH/DRAG": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "PUSH/DRAG": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "PUSH/DRAG": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161721.mjs b/.history/module/config/characteristic-tables_20241208161721.mjs new file mode 100644 index 0000000..2ffc843 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161721.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161722.mjs b/.history/module/config/characteristic-tables_20241208161722.mjs new file mode 100644 index 0000000..2ffc843 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161722.mjs @@ -0,0 +1,281 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161731.mjs b/.history/module/config/characteristic-tables_20241208161731.mjs new file mode 100644 index 0000000..84c21e1 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161731.mjs @@ -0,0 +1,282 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis" +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161811.mjs b/.history/module/config/characteristic-tables_20241208161811.mjs new file mode 100644 index 0000000..525fa7a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161811.mjs @@ -0,0 +1,282 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161812.mjs b/.history/module/config/characteristic-tables_20241208161812.mjs new file mode 100644 index 0000000..16800c0 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161812.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "INTELLIGENCE": 1, + "ATTACK": -5, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "INTELLIGENCE": 2, + "ATTACK": -4, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "INTELLIGENCE": 3, + "ATTACK": -3, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "INTELLIGENCE": 4, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "INTELLIGENCE": 5, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "INTELLIGENCE": 6, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "INTELLIGENCE": 7, + "ATTACK": -1, + "DEFENSE": -1, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "INTELLIGENCE": 8, + "ATTACK": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "INTELLIGENCE": 9, + "ATTACK": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 10, + "ATTACK": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 11, + "ATTACK": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 1, + "AETHER": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 12, + "ATTACK": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 2, + "AETHER": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "INTELLIGENCE": 13, + "ATTACK": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 3, + "AETHER": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "INTELLIGENCE": 14, + "ATTACK": 1, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 4, + "AETHER": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "INTELLIGENCE": 15, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 5, + "AETHER": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "INTELLIGENCE": 16, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 7, + "AETHER": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "INTELLIGENCE": 17, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 9, + "AETHER": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "INTELLIGENCE": 18, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 11, + "AETHER": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "INTELLIGENCE": 19, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 13, + "AETHER": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "INTELLIGENCE": 20, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 15, + "AETHER": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "INTELLIGENCE": 21, + "ATTACK": 4, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 18, + "AETHER": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "INTELLIGENCE": 22, + "ATTACK": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 21, + "AETHER": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "INTELLIGENCE": 23, + "ATTACK": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 24, + "AETHER": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "INTELLIGENCE": 24, + "ATTACK": 5, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 27, + "AETHER": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "INTELLIGENCE": 25, + "ATTACK": 5, + "DEFENSE": 4, + "DEVELOPMENT POINTS": 30, + "AETHER": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161821.mjs b/.history/module/config/characteristic-tables_20241208161821.mjs new file mode 100644 index 0000000..3d6879b --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161821.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "INTELLIGENCE": 1, + "ATTACK": -5, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "INTELLIGENCE": 2, + "ATTACK": -4, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "INTELLIGENCE": 3, + "ATTACK": -3, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "INTELLIGENCE": 4, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "INTELLIGENCE": 5, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "INTELLIGENCE": 6, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "INTELLIGENCE": 7, + "ATTACK": -1, + "DEFENSE": -1, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "INTELLIGENCE": 8, + "ATTACK": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "INTELLIGENCE": 9, + "ATTACK": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 10, + "ATTACK": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 11, + "ATTACK": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 1, + "AETHER": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 12, + "ATTACK": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 2, + "AETHER": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "INTELLIGENCE": 13, + "ATTACK": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 3, + "AETHER": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "INTELLIGENCE": 14, + "ATTACK": 1, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 4, + "AETHER": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "INTELLIGENCE": 15, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 5, + "AETHER": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "INTELLIGENCE": 16, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 7, + "AETHER": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "INTELLIGENCE": 17, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 9, + "AETHER": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "INTELLIGENCE": 18, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 11, + "AETHER": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "INTELLIGENCE": 19, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 13, + "AETHER": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "INTELLIGENCE": 20, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 15, + "AETHER": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "INTELLIGENCE": 21, + "ATTACK": 4, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 18, + "AETHER": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "INTELLIGENCE": 22, + "ATTACK": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 21, + "AETHER": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "INTELLIGENCE": 23, + "ATTACK": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 24, + "AETHER": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + },lue + { + "INTELLIGENCE": 24, + "ATTACK": 5, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 27, + "AETHER": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "INTELLIGENCE": 25, + "ATTACK": 5, + "DEFENSE": 4, + "DEVELOPMENT POINTS": 30, + "AETHER": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161822.mjs b/.history/module/config/characteristic-tables_20241208161822.mjs new file mode 100644 index 0000000..16800c0 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161822.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "INTELLIGENCE": 1, + "ATTACK": -5, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "INTELLIGENCE": 2, + "ATTACK": -4, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "INTELLIGENCE": 3, + "ATTACK": -3, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "INTELLIGENCE": 4, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "INTELLIGENCE": 5, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "INTELLIGENCE": 6, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "INTELLIGENCE": 7, + "ATTACK": -1, + "DEFENSE": -1, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "INTELLIGENCE": 8, + "ATTACK": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "INTELLIGENCE": 9, + "ATTACK": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 10, + "ATTACK": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 11, + "ATTACK": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 1, + "AETHER": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "INTELLIGENCE": 12, + "ATTACK": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 2, + "AETHER": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "INTELLIGENCE": 13, + "ATTACK": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 3, + "AETHER": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "INTELLIGENCE": 14, + "ATTACK": 1, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 4, + "AETHER": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "INTELLIGENCE": 15, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 5, + "AETHER": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "INTELLIGENCE": 16, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 7, + "AETHER": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "INTELLIGENCE": 17, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 9, + "AETHER": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "INTELLIGENCE": 18, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 11, + "AETHER": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "INTELLIGENCE": 19, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 13, + "AETHER": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "INTELLIGENCE": 20, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 15, + "AETHER": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "INTELLIGENCE": 21, + "ATTACK": 4, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 18, + "AETHER": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "INTELLIGENCE": 22, + "ATTACK": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 21, + "AETHER": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "INTELLIGENCE": 23, + "ATTACK": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 24, + "AETHER": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "INTELLIGENCE": 24, + "ATTACK": 5, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 27, + "AETHER": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "INTELLIGENCE": 25, + "ATTACK": 5, + "DEFENSE": 4, + "DEVELOPMENT POINTS": 30, + "AETHER": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161827.mjs b/.history/module/config/characteristic-tables_20241208161827.mjs new file mode 100644 index 0000000..bc2e049 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161827.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "ATTACK": -5, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 2, + "ATTACK": -4, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 3, + "ATTACK": -3, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "value": 4, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "value": 5, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "value": 6, + "ATTACK": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "value": 7, + "ATTACK": -1, + "DEFENSE": -1, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "value": 8, + "ATTACK": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "value": 9, + "ATTACK": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "value": 10, + "ATTACK": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "value": 11, + "ATTACK": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 1, + "AETHER": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "value": 12, + "ATTACK": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 2, + "AETHER": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "value": 13, + "ATTACK": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 3, + "AETHER": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "value": 14, + "ATTACK": 1, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 4, + "AETHER": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "value": 15, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 5, + "AETHER": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "value": 16, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 7, + "AETHER": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "value": 17, + "ATTACK": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 9, + "AETHER": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "value": 18, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 11, + "AETHER": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "value": 19, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 13, + "AETHER": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "value": 20, + "ATTACK": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 15, + "AETHER": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "value": 21, + "ATTACK": 4, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 18, + "AETHER": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "value": 22, + "ATTACK": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 21, + "AETHER": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "value": 23, + "ATTACK": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 24, + "AETHER": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "value": 24, + "ATTACK": 5, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 27, + "AETHER": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "value": 25, + "ATTACK": 5, + "DEFENSE": 4, + "DEVELOPMENT POINTS": 30, + "AETHER": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161835.mjs b/.history/module/config/characteristic-tables_20241208161835.mjs new file mode 100644 index 0000000..8ad5345 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161835.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 2, + "attack": -4, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 3, + "attack": -3, + "DEFENSE": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "value": 4, + "attack": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "value": 5, + "attack": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "value": 6, + "attack": -2, + "DEFENSE": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "value": 7, + "attack": -1, + "DEFENSE": -1, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "value": 8, + "attack": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "value": 9, + "attack": -1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "value": 10, + "attack": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "value": 11, + "attack": 0, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 1, + "AETHER": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "value": 12, + "attack": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 2, + "AETHER": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "value": 13, + "attack": 1, + "DEFENSE": 0, + "DEVELOPMENT POINTS": 3, + "AETHER": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "value": 14, + "attack": 1, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 4, + "AETHER": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "value": 15, + "attack": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 5, + "AETHER": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "value": 16, + "attack": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 7, + "AETHER": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "value": 17, + "attack": 2, + "DEFENSE": 1, + "DEVELOPMENT POINTS": 9, + "AETHER": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "value": 18, + "attack": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 11, + "AETHER": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "value": 19, + "attack": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 13, + "AETHER": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "value": 20, + "attack": 3, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 15, + "AETHER": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "value": 21, + "attack": 4, + "DEFENSE": 2, + "DEVELOPMENT POINTS": 18, + "AETHER": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "value": 22, + "attack": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 21, + "AETHER": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "value": 23, + "attack": 4, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 24, + "AETHER": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "value": 24, + "attack": 5, + "DEFENSE": 3, + "DEVELOPMENT POINTS": 27, + "AETHER": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "value": 25, + "attack": 5, + "DEFENSE": 4, + "DEVELOPMENT POINTS": 30, + "AETHER": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161841.mjs b/.history/module/config/characteristic-tables_20241208161841.mjs new file mode 100644 index 0000000..3cbe3bb --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161841.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "DEVELOPMENT POINTS": 1, + "AETHER": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "DEVELOPMENT POINTS": 2, + "AETHER": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "DEVELOPMENT POINTS": 3, + "AETHER": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "DEVELOPMENT POINTS": 4, + "AETHER": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "DEVELOPMENT POINTS": 5, + "AETHER": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "DEVELOPMENT POINTS": 7, + "AETHER": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "DEVELOPMENT POINTS": 9, + "AETHER": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "DEVELOPMENT POINTS": 11, + "AETHER": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "DEVELOPMENT POINTS": 13, + "AETHER": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "DEVELOPMENT POINTS": 15, + "AETHER": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "DEVELOPMENT POINTS": 18, + "AETHER": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "DEVELOPMENT POINTS": 21, + "AETHER": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "DEVELOPMENT POINTS": 24, + "AETHER": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "DEVELOPMENT POINTS": 27, + "AETHER": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "DEVELOPMENT POINTS": 30, + "AETHER": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161852.mjs b/.history/module/config/characteristic-tables_20241208161852.mjs new file mode 100644 index 0000000..1f5fca6 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161852.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "DEVELOPMENT POINTS": 0, + "AETHER": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "DEVELOPMENT POINTS": 0, + "AETHER": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "DEVELOPMENT POINTS": 0, + "AETHER": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "DEVELOPMENT POINTS": 1, + "AETHER": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "DEVELOPMENT POINTS": 2, + "AETHER": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "DEVELOPMENT POINTS": 3, + "AETHER": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "DEVELOPMENT POINTS": 4, + "AETHER": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "DEVELOPMENT POINTS": 5, + "AETHER": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "DEVELOPMENT POINTS": 7, + "AETHER": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "DEVELOPMENT POINTS": 9, + "AETHER": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "DEVELOPMENT POINTS": 11, + "AETHER": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "DEVELOPMENT POINTS": 13, + "AETHER": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "DEVELOPMENT POINTS": 15, + "AETHER": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "DEVELOPMENT POINTS": 18, + "AETHER": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "DEVELOPMENT POINTS": 21, + "AETHER": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "DEVELOPMENT POINTS": 24, + "AETHER": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "AETHER": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "DEVELOPMENT POINTS": 30, + "AETHER": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161854.mjs b/.history/module/config/characteristic-tables_20241208161854.mjs new file mode 100644 index 0000000..5e440ad --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161854.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "AETHER": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "AETHER": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "AETHER": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "AETHER": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "AETHER": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "AETHER": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "AETHER": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "AETHER": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "AETHER": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "AETHER": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "AETHER": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "AETHER": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "AETHER": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "AETHER": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "AETHER": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "AETHER": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "AETHER": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "AETHER": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "AETHER": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "AETHER": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "AETHER": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "AETHER": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "AETHER": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "AETHER": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161902.mjs b/.history/module/config/characteristic-tables_20241208161902.mjs new file mode 100644 index 0000000..ec15d5d --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161902.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "SPELL COGNITION": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "SPELL COGNITION": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "SPELL COGNITION": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "SPELL COGNITION": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "SPELL COGNITION": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "SPELL COGNITION": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "SPELL COGNITION": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "SPELL COGNITION": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "SPELL COGNITION": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "SPELL COGNITION": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "SPELL COGNITION": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "SPELL COGNITION": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "SPELL COGNITION": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "SPELL COGNITION": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "SPELL COGNITION": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "SPELL COGNITION": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "SPELL COGNITION": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "SPELL COGNITION": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "SPELL COGNITION": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "SPELL COGNITION": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "SPELL COGNITION": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "SPELL COGNITION": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "SPELL COGNITION": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "SPELL COGNITION": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161913.mjs b/.history/module/config/characteristic-tables_20241208161913.mjs new file mode 100644 index 0000000..a68e832 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161913.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "ARKANE CASTING MOD": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "ARKANE CASTING MOD": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "ARKANE CASTING MOD": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "ARKANE CASTING MOD": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "ARKANE CASTING MOD": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "ARKANE CASTING MOD": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "ARKANE CASTING MOD": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "ARKANE CASTING MOD": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "ARKANE CASTING MOD": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "ARKANE CASTING MOD": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "ARKANE CASTING MOD": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "ARKANE CASTING MOD": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "ARKANE CASTING MOD": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "ARKANE CASTING MOD": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "ARKANE CASTING MOD": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "ARKANE CASTING MOD": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "ARKANE CASTING MOD": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "ARKANE CASTING MOD": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "ARKANE CASTING MOD": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "ARKANE CASTING MOD": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "ARKANE CASTING MOD": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "ARKANE CASTING MOD": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "ARKANE CASTING MOD": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "ARKANE CASTING MOD": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161929.mjs b/.history/module/config/characteristic-tables_20241208161929.mjs new file mode 100644 index 0000000..fb3d753 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161929.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161955.mjs b/.history/module/config/characteristic-tables_20241208161955.mjs new file mode 100644 index 0000000..59f93f6 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161955.mjs @@ -0,0 +1,508 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208161958.mjs b/.history/module/config/characteristic-tables_20241208161958.mjs new file mode 100644 index 0000000..8b341fb --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208161958.mjs @@ -0,0 +1,509 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con" +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162000.mjs b/.history/module/config/characteristic-tables_20241208162000.mjs new file mode 100644 index 0000000..7649ae3 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162000.mjs @@ -0,0 +1,509 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162001.mjs b/.history/module/config/characteristic-tables_20241208162001.mjs new file mode 100644 index 0000000..d46086a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162001.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "CONSTITUTION": 1, + "": "", + "Hit Points ": 1, + "Aether points": -50, + "Pain Save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "CONSTITUTION": 2, + "": "", + "Hit Points ": 2, + "Aether points": -40, + "Pain Save": 2, + "Toughness Save": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "CONSTITUTION": 3, + "": "", + "Hit Points ": 3, + "Aether points": -35, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "CONSTITUTION": 4, + "": "", + "Hit Points ": 4, + "Aether points": -30, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "CONSTITUTION": 5, + "": "", + "Hit Points ": 5, + "Aether points": -25, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "CONSTITUTION": 6, + "": "", + "Hit Points ": 6, + "Aether points": -20, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "CONSTITUTION": 7, + "": "", + "Hit Points ": 7, + "Aether points": -15, + "Pain Save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "CONSTITUTION": 8, + "": "", + "Hit Points ": 8, + "Aether points": -10, + "Pain Save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "CONSTITUTION": 9, + "": "", + "Hit Points ": 9, + "Aether points": -5, + "Pain Save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "CONSTITUTION": 10, + "": "", + "Hit Points ": 10, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "CONSTITUTION": 11, + "": "", + "Hit Points ": 11, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "CONSTITUTION": 12, + "": "", + "Hit Points ": 12, + "Aether points": 5, + "Pain Save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "CONSTITUTION": 13, + "": "", + "Hit Points ": 13, + "Aether points": 10, + "Pain Save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "CONSTITUTION": 14, + "": "", + "Hit Points ": 14, + "Aether points": 20, + "Pain Save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "CONSTITUTION": 15, + "": "", + "Hit Points ": 15, + "Aether points": 30, + "Pain Save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "CONSTITUTION": 16, + "": "", + "Hit Points ": 16, + "Aether points": 40, + "Pain Save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "CONSTITUTION": 17, + "": "", + "Hit Points ": 17, + "Aether points": 50, + "Pain Save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "CONSTITUTION": 18, + "": "", + "Hit Points ": 18, + "Aether points": 60, + "Pain Save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "CONSTITUTION": 19, + "": "", + "Hit Points ": 19, + "Aether points": 70, + "Pain Save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "CONSTITUTION": 20, + "": "", + "Hit Points ": 20, + "Aether points": 80, + "Pain Save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "CONSTITUTION": 21, + "": "", + "Hit Points ": 21, + "Aether points": 90, + "Pain Save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "CONSTITUTION": 22, + "": "", + "Hit Points ": 22, + "Aether points": 100, + "Pain Save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "CONSTITUTION": 23, + "": "", + "Hit Points ": 23, + "Aether points": 110, + "Pain Save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONSTITUTION": 24, + "": "", + "Hit Points ": 24, + "Aether points": 120, + "Pain Save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONSTITUTION": 25, + "": "", + "Hit Points ": 25, + "Aether points": 130, + "Pain Save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162006.mjs b/.history/module/config/characteristic-tables_20241208162006.mjs new file mode 100644 index 0000000..75de19c --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162006.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "CONSTITUTION": 1, + "": "", + "Hit Points ": 1, + "Aether points": -50, + "Pain Save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "CONSTITUTION": 2, + "": "", + "Hit Points ": 2, + "Aether points": -40, + "Pain Save": 2, + "Toughness Save": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "CONSTITUTION": 3, + "": "", + "Hit Points ": 3, + "Aether points": -35, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "CONSTITUTION": 4, + "": "", + "Hit Points ": 4, + "Aether points": -30, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "CONSTITUTION": 5, + "": "", + "Hit Points ": 5, + "Aether points": -25, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "CONSTITUTION": 6, + "": "", + "Hit Points ": 6, + "Aether points": -20, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "CONSTITUTION": 7, + "": "", + "Hit Points ": 7, + "Aether points": -15, + "Pain Save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "CONSTITUTION": 8, + "": "", + "Hit Points ": 8, + "Aether points": -10, + "Pain Save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "CONSTITUTION": 9, + "": "", + "Hit Points ": 9, + "Aether points": -5, + "Pain Save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "CONSTITUTION": 10, + "": "", + "Hit Points ": 10, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "CONSTITUTION": 11, + "": "", + "Hit Points ": 11, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "CONSTITUTION": 12, + "": "", + "Hit Points ": 12, + "Aether points": 5, + "Pain Save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "CONSTITUTION": 13, + "": "", + "Hit Points ": 13, + "Aether points": 10, + "Pain Save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "CONSTITUTION": 14, + "": "", + "Hit Points ": 14, + "Aether points": 20, + "Pain Save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "CONSTITUTION": 15, + "": "", + "Hit Points ": 15, + "Aether points": 30, + "Pain Save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "CONSTITUTION": 16, + "": "", + "Hit Points ": 16, + "Aether points": 40, + "Pain Save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "CONSTITUTION": 17, + "": "", + "Hit Points ": 17, + "Aether points": 50, + "Pain Save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "CONSTITUTION": 18, + "": "", + "Hit Points ": 18, + "Aether points": 60, + "Pain Save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "CONSTITUTION": 19, + "": "", + "Hit Points ": 19, + "Aether points": 70, + "Pain Save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "CONSTITUTION": 20, + "": "", + "Hit Points ": 20, + "Aether points": 80, + "Pain Save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "CONSTITUTION": 21, + "": "", + "Hit Points ": 21, + "Aether points": 90, + "Pain Save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "CONSTITUTION": 22, + "": "", + "Hit Points ": 22, + "Aether points": 100, + "Pain Save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "CONSTITUTION": 23, + "": "", + "Hit Points ": 23, + "Aether points": 110, + "Pain Save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONSTITUTION": 24, + "": "", + "Hit Points ": 24, + "Aether points": 120, + "Pain Save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + "": "", + "Hit Points ": 25, + "Aether points": 130, + "Pain Save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162010.mjs b/.history/module/config/characteristic-tables_20241208162010.mjs new file mode 100644 index 0000000..e847f2e --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162010.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + "": "", + "Hit Points ": 1, + "Aether points": -50, + "Pain Save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + "": "", + "Hit Points ": 2, + "Aether points": -40, + "Pain Save": 2, + "Toughness Save": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + "": "", + "Hit Points ": 3, + "Aether points": -35, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + "": "", + "Hit Points ": 4, + "Aether points": -30, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + "": "", + "Hit Points ": 5, + "Aether points": -25, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + "": "", + "Hit Points ": 6, + "Aether points": -20, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + "": "", + "Hit Points ": 7, + "Aether points": -15, + "Pain Save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + "": "", + "Hit Points ": 8, + "Aether points": -10, + "Pain Save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + "": "", + "Hit Points ": 9, + "Aether points": -5, + "Pain Save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + "": "", + "Hit Points ": 10, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + "": "", + "Hit Points ": 11, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + "": "", + "Hit Points ": 12, + "Aether points": 5, + "Pain Save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + "": "", + "Hit Points ": 13, + "Aether points": 10, + "Pain Save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + "": "", + "Hit Points ": 14, + "Aether points": 20, + "Pain Save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + "": "", + "Hit Points ": 15, + "Aether points": 30, + "Pain Save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + "": "", + "Hit Points ": 16, + "Aether points": 40, + "Pain Save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + "": "", + "Hit Points ": 17, + "Aether points": 50, + "Pain Save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + "": "", + "Hit Points ": 18, + "Aether points": 60, + "Pain Save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + "": "", + "Hit Points ": 19, + "Aether points": 70, + "Pain Save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + "": "", + "Hit Points ": 20, + "Aether points": 80, + "Pain Save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + "": "", + "Hit Points ": 21, + "Aether points": 90, + "Pain Save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + "": "", + "Hit Points ": 22, + "Aether points": 100, + "Pain Save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + "": "", + "Hit Points ": 23, + "Aether points": 110, + "Pain Save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + "": "", + "Hit Points ": 24, + "Aether points": 120, + "Pain Save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + "": "", + "Hit Points ": 25, + "Aether points": 130, + "Pain Save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162020.mjs b/.history/module/config/characteristic-tables_20241208162020.mjs new file mode 100644 index 0000000..79f461d --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162020.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "Hit Points ": 1, + "Aether points": -50, + "Pain Save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "Hit Points ": 2, + "Aether points": -40, + "Pain Save": 2, + "Toughness Save": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "Hit Points ": 3, + "Aether points": -35, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "Hit Points ": 4, + "Aether points": -30, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "Hit Points ": 5, + "Aether points": -25, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "Hit Points ": 6, + "Aether points": -20, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "Hit Points ": 7, + "Aether points": -15, + "Pain Save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "Hit Points ": 8, + "Aether points": -10, + "Pain Save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "Hit Points ": 9, + "Aether points": -5, + "Pain Save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "Hit Points ": 10, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "Hit Points ": 11, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "Hit Points ": 12, + "Aether points": 5, + "Pain Save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "Hit Points ": 13, + "Aether points": 10, + "Pain Save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "Hit Points ": 14, + "Aether points": 20, + "Pain Save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "Hit Points ": 15, + "Aether points": 30, + "Pain Save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "Hit Points ": 16, + "Aether points": 40, + "Pain Save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "Hit Points ": 17, + "Aether points": 50, + "Pain Save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "Hit Points ": 18, + "Aether points": 60, + "Pain Save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "Hit Points ": 19, + "Aether points": 70, + "Pain Save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "Hit Points ": 20, + "Aether points": 80, + "Pain Save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "Hit Points ": 21, + "Aether points": 90, + "Pain Save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "Hit Points ": 22, + "Aether points": 100, + "Pain Save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "Hit Points ": 23, + "Aether points": 110, + "Pain Save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "Hit Points ": 24, + "Aether points": 120, + "Pain Save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "Hit Points ": 25, + "Aether points": 130, + "Pain Save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162027.mjs b/.history/module/config/characteristic-tables_20241208162027.mjs new file mode 100644 index 0000000..8e13c93 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162027.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "Aether points": -50, + "Pain Save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "hp ": 2, + "Aether points": -40, + "Pain Save": 2, + "Toughness Save": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "hp ": 3, + "Aether points": -35, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "hp ": 4, + "Aether points": -30, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "hp ": 5, + "Aether points": -25, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "hp ": 6, + "Aether points": -20, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "hp ": 7, + "Aether points": -15, + "Pain Save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "hp ": 8, + "Aether points": -10, + "Pain Save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "hp ": 9, + "Aether points": -5, + "Pain Save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "hp ": 10, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "hp ": 11, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "hp ": 12, + "Aether points": 5, + "Pain Save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "hp ": 13, + "Aether points": 10, + "Pain Save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "hp ": 14, + "Aether points": 20, + "Pain Save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "hp ": 15, + "Aether points": 30, + "Pain Save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "hp ": 16, + "Aether points": 40, + "Pain Save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "hp ": 17, + "Aether points": 50, + "Pain Save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "hp ": 18, + "Aether points": 60, + "Pain Save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "hp ": 19, + "Aether points": 70, + "Pain Save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "hp ": 20, + "Aether points": 80, + "Pain Save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "hp ": 21, + "Aether points": 90, + "Pain Save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "hp ": 22, + "Aether points": 100, + "Pain Save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "hp ": 23, + "Aether points": 110, + "Pain Save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "hp ": 24, + "Aether points": 120, + "Pain Save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "Aether points": 130, + "Pain Save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162030.mjs b/.history/module/config/characteristic-tables_20241208162030.mjs new file mode 100644 index 0000000..8e13c93 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162030.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "Aether points": -50, + "Pain Save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "hp ": 2, + "Aether points": -40, + "Pain Save": 2, + "Toughness Save": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "hp ": 3, + "Aether points": -35, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "hp ": 4, + "Aether points": -30, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "hp ": 5, + "Aether points": -25, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "hp ": 6, + "Aether points": -20, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "hp ": 7, + "Aether points": -15, + "Pain Save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "hp ": 8, + "Aether points": -10, + "Pain Save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "hp ": 9, + "Aether points": -5, + "Pain Save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "hp ": 10, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "hp ": 11, + "Aether points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "hp ": 12, + "Aether points": 5, + "Pain Save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "hp ": 13, + "Aether points": 10, + "Pain Save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "hp ": 14, + "Aether points": 20, + "Pain Save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "hp ": 15, + "Aether points": 30, + "Pain Save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "hp ": 16, + "Aether points": 40, + "Pain Save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "hp ": 17, + "Aether points": 50, + "Pain Save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "hp ": 18, + "Aether points": 60, + "Pain Save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "hp ": 19, + "Aether points": 70, + "Pain Save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "hp ": 20, + "Aether points": 80, + "Pain Save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "hp ": 21, + "Aether points": 90, + "Pain Save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "hp ": 22, + "Aether points": 100, + "Pain Save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "hp ": 23, + "Aether points": 110, + "Pain Save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "hp ": 24, + "Aether points": 120, + "Pain Save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "Aether points": 130, + "Pain Save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162042.mjs b/.history/module/config/characteristic-tables_20241208162042.mjs new file mode 100644 index 0000000..a716e9f --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162042.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "Pain Save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "Pain Save": 2, + "Toughness Save": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "Pain Save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "Pain Save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "Pain Save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "Pain Save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "Pain Save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "Pain Save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "Pain Save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "Pain Save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "Pain Save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "Pain Save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "Pain Save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "Pain Save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "Pain Save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "Pain Save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "Pain Save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "Pain Save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "Pain Save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162109.mjs b/.history/module/config/characteristic-tables_20241208162109.mjs new file mode 100644 index 0000000..77b56ee --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162109.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "Pain Save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "Pain Save": 2, + "toughness_saave": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "Pain Save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "Pain Save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "Pain Save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "Pain Save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "Pain Save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "Pain Save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "Pain Save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "Pain Save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "Pain Save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "Pain Save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "Pain Save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "Pain Save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "Pain Save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "Pain Save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "Pain Save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "Pain Save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "Pain Save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "Pain Save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "Pain Save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "Pain Save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162144.mjs b/.history/module/config/characteristic-tables_20241208162144.mjs new file mode 100644 index 0000000..71c4a41 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162144.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162149.mjs b/.history/module/config/characteristic-tables_20241208162149.mjs new file mode 100644 index 0000000..71c4a41 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162149.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "Toughness Save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "Toughness Save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "Toughness Save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "Toughness Save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "Toughness Save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "Toughness Save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "Toughness Save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "Toughness Save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "Toughness Save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "Toughness Save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "Toughness Save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "Toughness Save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "Toughness Save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "Toughness Save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "Toughness Save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "Toughness Save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "Toughness Save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "Toughness Save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "Toughness Save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "Toughness Save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162202.mjs b/.history/module/config/characteristic-tables_20241208162202.mjs new file mode 100644 index 0000000..c968a6f --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162202.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "Stabilization Dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "Stabilization Dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "Stabilization Dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "Stabilization Dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "Stabilization Dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162217.mjs b/.history/module/config/characteristic-tables_20241208162217.mjs new file mode 100644 index 0000000..f6b0e55 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162217.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "Base Pain Tolerance %": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "Base Pain Tolerance %": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "Base Pain Tolerance %": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "Base Pain Tolerance %": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "Base Pain Tolerance %": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "Base Pain Tolerance %": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "Base Pain Tolerance %": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "Base Pain Tolerance %": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "Base Pain Tolerance %": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "Base Pain Tolerance %": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "Base Pain Tolerance %": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "Base Pain Tolerance %": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "Base Pain Tolerance %": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "Base Pain Tolerance %": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "Base Pain Tolerance %": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "Base Pain Tolerance %": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "Base Pain Tolerance %": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "Base Pain Tolerance %": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "Base Pain Tolerance %": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "Base Pain Tolerance %": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162244.mjs b/.history/module/config/characteristic-tables_20241208162244.mjs new file mode 100644 index 0000000..a987d04 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162244.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162245.mjs b/.history/module/config/characteristic-tables_20241208162245.mjs new file mode 100644 index 0000000..a987d04 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162245.mjs @@ -0,0 +1,760 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +] +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162424.mjs b/.history/module/config/characteristic-tables_20241208162424.mjs new file mode 100644 index 0000000..bcbe266 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162424.mjs @@ -0,0 +1,761 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha" +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162426.mjs b/.history/module/config/characteristic-tables_20241208162426.mjs new file mode 100644 index 0000000..d0206fd --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162426.mjs @@ -0,0 +1,761 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha": +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162428.mjs b/.history/module/config/characteristic-tables_20241208162428.mjs new file mode 100644 index 0000000..e13b5ae --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162428.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +],[ + { + "CHARISMA": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "CHARISMA": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] +"cha": +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162433.mjs b/.history/module/config/characteristic-tables_20241208162433.mjs new file mode 100644 index 0000000..e7fc81e --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162433.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +],[ + { + "CHARISMA": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "CHARISMA": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162445.mjs b/.history/module/config/characteristic-tables_20241208162445.mjs new file mode 100644 index 0000000..9e81a77 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162445.mjs @@ -0,0 +1,938 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +[ + { + "CHARISMA": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "CHARISMA": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162446.mjs b/.history/module/config/characteristic-tables_20241208162446.mjs new file mode 100644 index 0000000..3811a49 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162446.mjs @@ -0,0 +1,938 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "CHARISMA": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "CHARISMA": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162447.mjs b/.history/module/config/characteristic-tables_20241208162447.mjs new file mode 100644 index 0000000..3811a49 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162447.mjs @@ -0,0 +1,938 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "CONST ITUTION": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "CHARISMA": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "CHARISMA": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162454.mjs b/.history/module/config/characteristic-tables_20241208162454.mjs new file mode 100644 index 0000000..2601d71 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162454.mjs @@ -0,0 +1,938 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "CHARISMA": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "CHARISMA": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162455.mjs b/.history/module/config/characteristic-tables_20241208162455.mjs new file mode 100644 index 0000000..a8ab1c7 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162455.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "CHARISMA": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "CHARISMA": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "CHARISMA": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "CHARISMA": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "CHARISMA": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "CHARISMA": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "CHARISMA": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "CHARISMA": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162504.mjs b/.history/module/config/characteristic-tables_20241208162504.mjs new file mode 100644 index 0000000..1c13ada --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162504.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "value": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "value": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "value": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "value": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "value": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "value": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "value": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "value": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "value": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "value": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "value": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "value": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "value": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162508.mjs b/.history/module/config/characteristic-tables_20241208162508.mjs new file mode 100644 index 0000000..addce9f --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162508.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "rit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "value": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "value": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "value": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "value": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "value": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "value": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "value": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "value": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "value": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "value": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "value": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "value": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "value": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162509.mjs b/.history/module/config/characteristic-tables_20241208162509.mjs new file mode 100644 index 0000000..1c13ada --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162509.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "Grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 2, + "Grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 3, + "Grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 4, + "Grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 5, + "Grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 6, + "Grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 7, + "Grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 8, + "Grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 9, + "Grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 10, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 11, + "Grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 12, + "Grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "value": 13, + "Grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "value": 14, + "Grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "value": 15, + "Grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "value": 16, + "Grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "value": 17, + "Grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "value": 18, + "Grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "value": 19, + "Grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "value": 20, + "Grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "value": 21, + "Grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "value": 22, + "Grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "value": 23, + "Grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "value": 24, + "Grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "value": 25, + "Grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162513.mjs b/.history/module/config/characteristic-tables_20241208162513.mjs new file mode 100644 index 0000000..0a7e612 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162513.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 2, + "grit": -4, + "Turning /Casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 3, + "grit": -4, + "Turning /Casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 4, + "grit": -3, + "Turning /Casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 5, + "grit": -3, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 6, + "grit": -2, + "Turning /Casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 7, + "grit": -2, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 8, + "grit": -1, + "Turning /Casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 9, + "grit": -1, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 10, + "grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 11, + "grit": 0, + "Turning /Casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 12, + "grit": 0, + "Turning /Casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "value": 13, + "grit": 1, + "Turning /Casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "value": 14, + "grit": 2, + "Turning /Casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "value": 15, + "grit": 4, + "Turning /Casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "value": 16, + "grit": 6, + "Turning /Casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "value": 17, + "grit": 8, + "Turning /Casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "value": 18, + "grit": 10, + "Turning /Casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "value": 19, + "grit": 11, + "Turning /Casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "value": 20, + "grit": 12, + "Turning /Casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "value": 21, + "grit": 13, + "Turning /Casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "value": 22, + "grit": 14, + "Turning /Casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "value": 23, + "grit": 15, + "Turning /Casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "value": 24, + "grit": 16, + "Turning /Casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "value": 25, + "grit": 18, + "Turning /Casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162523.mjs b/.history/module/config/characteristic-tables_20241208162523.mjs new file mode 100644 index 0000000..57b1e1b --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162523.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162535.mjs b/.history/module/config/characteristic-tables_20241208162535.mjs new file mode 100644 index 0000000..b67b98c --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162535.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "Development Points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "Development Points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "Development Points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "Development Points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "Development Points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "Development Points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "Development Points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "Development Points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "Development Points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "Development Points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "Development Points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "Development Points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "Development Points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "Development Points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "Development Points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162536.mjs b/.history/module/config/characteristic-tables_20241208162536.mjs new file mode 100644 index 0000000..e9a8ae1 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162536.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "Divine Miracle Bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "Divine Miracle Bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "Divine Miracle Bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "Divine Miracle Bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "Divine Miracle Bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "Divine Miracle Bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "Divine Miracle Bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "Divine Miracle Bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "Divine Miracle Bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "Divine Miracle Bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "Divine Miracle Bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "Divine Miracle Bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "Divine Miracle Bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "Divine Miracle Bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "Divine Miracle Bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162551.mjs b/.history/module/config/characteristic-tables_20241208162551.mjs new file mode 100644 index 0000000..b6ed84a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162551.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162552.mjs b/.history/module/config/characteristic-tables_20241208162552.mjs new file mode 100644 index 0000000..b6ed84a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162552.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162558.mjs b/.history/module/config/characteristic-tables_20241208162558.mjs new file mode 100644 index 0000000..b6ed84a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162558.mjs @@ -0,0 +1,937 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162639.mjs b/.history/module/config/characteristic-tables_20241208162639.mjs new file mode 100644 index 0000000..d4d8205 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162639.mjs @@ -0,0 +1,938 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc" + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162642.mjs b/.history/module/config/characteristic-tables_20241208162642.mjs new file mode 100644 index 0000000..fa8a57a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162642.mjs @@ -0,0 +1,1039 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "LUCK ": 1, + "Per level ": 0 + }, + { + "LUCK ": 2, + "Per level ": 0 + }, + { + "LUCK ": 3, + "Per level ": 1 + }, + { + "LUCK ": 4, + "Per level ": 2 + }, + { + "LUCK ": 5, + "Per level ": 3 + }, + { + "LUCK ": 6, + "Per level ": 4 + }, + { + "LUCK ": 7, + "Per level ": 5 + }, + { + "LUCK ": 8, + "Per level ": 6 + }, + { + "LUCK ": 9, + "Per level ": 7 + }, + { + "LUCK ": 10, + "Per level ": 8 + }, + { + "LUCK ": 11, + "Per level ": 9 + }, + { + "LUCK ": 12, + "Per level ": 10 + }, + { + "LUCK ": 13, + "Per level ": 11 + }, + { + "LUCK ": 14, + "Per level ": 12 + }, + { + "LUCK ": 15, + "Per level ": 13 + }, + { + "LUCK ": 16, + "Per level ": 14 + }, + { + "LUCK ": 17, + "Per level ": 15 + }, + { + "LUCK ": 18, + "Per level ": 16 + }, + { + "LUCK ": 19, + "Per level ": 18 + }, + { + "LUCK ": 20, + "Per level ": 20 + }, + { + "LUCK ": 21, + "Per level ": 22 + }, + { + "LUCK ": 22, + "Per level ": 24 + }, + { + "LUCK ": 23, + "Per level ": 26 + }, + { + "LUCK ": 24, + "Per level ": 28 + }, + { + "LUCK ": 25, + "Per level ": 30 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162657.mjs b/.history/module/config/characteristic-tables_20241208162657.mjs new file mode 100644 index 0000000..7a92379 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162657.mjs @@ -0,0 +1,1039 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "Per level ": 0 + }, + { + "value": 2, + "Per level ": 0 + }, + { + "value": 3, + "Per level ": 1 + }, + { + "value": 4, + "Per level ": 2 + }, + { + "value": 5, + "Per level ": 3 + }, + { + "value": 6, + "Per level ": 4 + }, + { + "value": 7, + "Per level ": 5 + }, + { + "value": 8, + "Per level ": 6 + }, + { + "value": 9, + "Per level ": 7 + }, + { + "value": 10, + "Per level ": 8 + }, + { + "value": 11, + "Per level ": 9 + }, + { + "value": 12, + "Per level ": 10 + }, + { + "value": 13, + "Per level ": 11 + }, + { + "value": 14, + "Per level ": 12 + }, + { + "value": 15, + "Per level ": 13 + }, + { + "value": 16, + "Per level ": 14 + }, + { + "value": 17, + "Per level ": 15 + }, + { + "value": 18, + "Per level ": 16 + }, + { + "value": 19, + "Per level ": 18 + }, + { + "value": 20, + "Per level ": 20 + }, + { + "value": 21, + "Per level ": 22 + }, + { + "value": 22, + "Per level ": 24 + }, + { + "value": 23, + "Per level ": 26 + }, + { + "value": 24, + "Per level ": 28 + }, + { + "value": 25, + "Per level ": 30 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162704.mjs b/.history/module/config/characteristic-tables_20241208162704.mjs new file mode 100644 index 0000000..fb939ad --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162704.mjs @@ -0,0 +1,1039 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162706.mjs b/.history/module/config/characteristic-tables_20241208162706.mjs new file mode 100644 index 0000000..fb939ad --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162706.mjs @@ -0,0 +1,1039 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162726.mjs b/.history/module/config/characteristic-tables_20241208162726.mjs new file mode 100644 index 0000000..1e510e8 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162726.mjs @@ -0,0 +1,1040 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis" + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162728.mjs b/.history/module/config/characteristic-tables_20241208162728.mjs new file mode 100644 index 0000000..3db4887 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162728.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "WISDOM": 1, + "Defense": -5, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -5, + "Willpower Save": -5, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 2, + "Defense": -4, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -4, + "Willpower Save": -4, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 3, + "Defense": -3, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -3, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 4, + "Defense": -3, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -2, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 5, + "Defense": -2, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 1, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 6, + "Defense": -2, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 7, + "Defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 8, + "Defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 9, + "Defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 10, + "Defense": 0, + "Init Cap": 18, + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 11, + "Defense": 0, + "Init Cap": 16, + "Development Points ": 1, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "WISDOM": 12, + "Defense": 1, + "Init Cap": 14, + "Development Points ": 2, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "WISDOM": 13, + "Defense": 1, + "Init Cap": 12, + "Development Points ": 3, + "Attack ": 0, + "Willpower Save": 1, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "WISDOM": 14, + "Defense": 1, + "Init Cap": 10, + "Development Points ": 4, + "Attack ": 1, + "Willpower Save": 2, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "WISDOM": 15, + "Defense": 2, + "Init Cap": 8, + "Development Points ": 5, + "Attack ": 1, + "Willpower Save": 3, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "WISDOM": 16, + "Defense": 2, + "Init Cap": 7, + "Development Points ": 7, + "Attack ": 1, + "Willpower Save": 4, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "WISDOM": 17, + "Defense": 2, + "Init Cap": 6, + "Development Points ": 9, + "Attack ": 1, + "Willpower Save": 5, + "Divine Miracle Bonus ": 3, + "": "" + }, + { + "WISDOM": 18, + "Defense": 3, + "Init Cap": 5, + "Development Points ": 11, + "Attack ": 2, + "Willpower Save": 6, + "Divine Miracle Bonus ": 4, + "": "" + }, + { + "WISDOM": 19, + "Defense": 3, + "Init Cap": 4, + "Development Points ": 13, + "Attack ": 2, + "Willpower Save": 7, + "Divine Miracle Bonus ": 5, + "": "" + }, + { + "WISDOM": 20, + "Defense": 3, + "Init Cap": 4, + "Development Points ": 15, + "Attack ": 2, + "Willpower Save": 8, + "Divine Miracle Bonus ": 6, + "": "" + }, + { + "WISDOM": 21, + "Defense": 4, + "Init Cap": 3, + "Development Points ": 18, + "Attack ": 2, + "Willpower Save": 9, + "Divine Miracle Bonus ": 7, + "": "" + }, + { + "WISDOM": 22, + "Defense": 4, + "Init Cap": 3, + "Development Points ": 21, + "Attack ": 2, + "Willpower Save": 10, + "Divine Miracle Bonus ": 8, + "": "" + }, + { + "WISDOM": 23, + "Defense": 4, + "Init Cap": 2, + "Development Points ": 24, + "Attack ": 3, + "Willpower Save": 11, + "Divine Miracle Bonus ": 9, + "": "" + }, + { + "WISDOM": 24, + "Defense": 4, + "Init Cap": 2, + "Development Points ": 27, + "Attack ": 3, + "Willpower Save": 12, + "Divine Miracle Bonus ": 10, + "": "" + }, + { + "WISDOM": 25, + "Defense": 5, + "Init Cap": 1, + "Development Points ": 30, + "Attack ": 4, + "Willpower Save": 13, + "Divine Miracle Bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162739.mjs b/.history/module/config/characteristic-tables_20241208162739.mjs new file mode 100644 index 0000000..cbd8127 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162739.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "Defense": -5, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -5, + "Willpower Save": -5, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 2, + "Defense": -4, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -4, + "Willpower Save": -4, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 3, + "Defense": -3, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -3, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 4, + "Defense": -3, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -2, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 5, + "Defense": -2, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 1, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 6, + "Defense": -2, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 7, + "Defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 8, + "Defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 9, + "Defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 10, + "Defense": 0, + "Init Cap": 18, + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 11, + "Defense": 0, + "Init Cap": 16, + "Development Points ": 1, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 12, + "Defense": 1, + "Init Cap": 14, + "Development Points ": 2, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 13, + "Defense": 1, + "Init Cap": 12, + "Development Points ": 3, + "Attack ": 0, + "Willpower Save": 1, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 14, + "Defense": 1, + "Init Cap": 10, + "Development Points ": 4, + "Attack ": 1, + "Willpower Save": 2, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 15, + "Defense": 2, + "Init Cap": 8, + "Development Points ": 5, + "Attack ": 1, + "Willpower Save": 3, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 16, + "Defense": 2, + "Init Cap": 7, + "Development Points ": 7, + "Attack ": 1, + "Willpower Save": 4, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 17, + "Defense": 2, + "Init Cap": 6, + "Development Points ": 9, + "Attack ": 1, + "Willpower Save": 5, + "Divine Miracle Bonus ": 3, + "": "" + }, + { + "value": 18, + "Defense": 3, + "Init Cap": 5, + "Development Points ": 11, + "Attack ": 2, + "Willpower Save": 6, + "Divine Miracle Bonus ": 4, + "": "" + }, + { + "value": 19, + "Defense": 3, + "Init Cap": 4, + "Development Points ": 13, + "Attack ": 2, + "Willpower Save": 7, + "Divine Miracle Bonus ": 5, + "": "" + }, + { + "value": 20, + "Defense": 3, + "Init Cap": 4, + "Development Points ": 15, + "Attack ": 2, + "Willpower Save": 8, + "Divine Miracle Bonus ": 6, + "": "" + }, + { + "value": 21, + "Defense": 4, + "Init Cap": 3, + "Development Points ": 18, + "Attack ": 2, + "Willpower Save": 9, + "Divine Miracle Bonus ": 7, + "": "" + }, + { + "value": 22, + "Defense": 4, + "Init Cap": 3, + "Development Points ": 21, + "Attack ": 2, + "Willpower Save": 10, + "Divine Miracle Bonus ": 8, + "": "" + }, + { + "value": 23, + "Defense": 4, + "Init Cap": 2, + "Development Points ": 24, + "Attack ": 3, + "Willpower Save": 11, + "Divine Miracle Bonus ": 9, + "": "" + }, + { + "value": 24, + "Defense": 4, + "Init Cap": 2, + "Development Points ": 27, + "Attack ": 3, + "Willpower Save": 12, + "Divine Miracle Bonus ": 10, + "": "" + }, + { + "value": 25, + "Defense": 5, + "Init Cap": 1, + "Development Points ": 30, + "Attack ": 4, + "Willpower Save": 13, + "Divine Miracle Bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162746.mjs b/.history/module/config/characteristic-tables_20241208162746.mjs new file mode 100644 index 0000000..bf2ec72 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162746.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -5, + "Willpower Save": -5, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -4, + "Willpower Save": -4, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -3, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": -2, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 1, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "Init Cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "Init Cap": 18, + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "Init Cap": 16, + "Development Points ": 1, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "Init Cap": 14, + "Development Points ": 2, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "Init Cap": 12, + "Development Points ": 3, + "Attack ": 0, + "Willpower Save": 1, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "Init Cap": 10, + "Development Points ": 4, + "Attack ": 1, + "Willpower Save": 2, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "Init Cap": 8, + "Development Points ": 5, + "Attack ": 1, + "Willpower Save": 3, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "Init Cap": 7, + "Development Points ": 7, + "Attack ": 1, + "Willpower Save": 4, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "Init Cap": 6, + "Development Points ": 9, + "Attack ": 1, + "Willpower Save": 5, + "Divine Miracle Bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "Init Cap": 5, + "Development Points ": 11, + "Attack ": 2, + "Willpower Save": 6, + "Divine Miracle Bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "Init Cap": 4, + "Development Points ": 13, + "Attack ": 2, + "Willpower Save": 7, + "Divine Miracle Bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "Init Cap": 4, + "Development Points ": 15, + "Attack ": 2, + "Willpower Save": 8, + "Divine Miracle Bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "Init Cap": 3, + "Development Points ": 18, + "Attack ": 2, + "Willpower Save": 9, + "Divine Miracle Bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "Init Cap": 3, + "Development Points ": 21, + "Attack ": 2, + "Willpower Save": 10, + "Divine Miracle Bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "Init Cap": 2, + "Development Points ": 24, + "Attack ": 3, + "Willpower Save": 11, + "Divine Miracle Bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "Init Cap": 2, + "Development Points ": 27, + "Attack ": 3, + "Willpower Save": 12, + "Divine Miracle Bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "Init Cap": 1, + "Development Points ": 30, + "Attack ": 4, + "Willpower Save": 13, + "Divine Miracle Bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162753.mjs b/.history/module/config/characteristic-tables_20241208162753.mjs new file mode 100644 index 0000000..22b829d --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162753.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "Development Points ": 0, + "Attack ": -5, + "Willpower Save": -5, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "Development Points ": 0, + "Attack ": -4, + "Willpower Save": -4, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "Development Points ": 0, + "Attack ": -3, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "Development Points ": 0, + "Attack ": -2, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "Development Points ": 0, + "Attack ": 1, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "Development Points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "Development Points ": 1, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "Development Points ": 2, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "Development Points ": 3, + "Attack ": 0, + "Willpower Save": 1, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "Development Points ": 4, + "Attack ": 1, + "Willpower Save": 2, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "Development Points ": 5, + "Attack ": 1, + "Willpower Save": 3, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "Development Points ": 7, + "Attack ": 1, + "Willpower Save": 4, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "Development Points ": 9, + "Attack ": 1, + "Willpower Save": 5, + "Divine Miracle Bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "Development Points ": 11, + "Attack ": 2, + "Willpower Save": 6, + "Divine Miracle Bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "Development Points ": 13, + "Attack ": 2, + "Willpower Save": 7, + "Divine Miracle Bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "Development Points ": 15, + "Attack ": 2, + "Willpower Save": 8, + "Divine Miracle Bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "Development Points ": 18, + "Attack ": 2, + "Willpower Save": 9, + "Divine Miracle Bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "Development Points ": 21, + "Attack ": 2, + "Willpower Save": 10, + "Divine Miracle Bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "Development Points ": 24, + "Attack ": 3, + "Willpower Save": 11, + "Divine Miracle Bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "Development Points ": 27, + "Attack ": 3, + "Willpower Save": 12, + "Divine Miracle Bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "Development Points ": 30, + "Attack ": 4, + "Willpower Save": 13, + "Divine Miracle Bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162805.mjs b/.history/module/config/characteristic-tables_20241208162805.mjs new file mode 100644 index 0000000..a2fe3c8 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162805.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "Attack ": -5, + "Willpower Save": -5, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "Attack ": -4, + "Willpower Save": -4, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "Attack ": -3, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "Attack ": -2, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "Attack ": 1, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "Attack ": 0, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "Attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "Attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "Attack ": 0, + "Willpower Save": 1, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "Attack ": 1, + "Willpower Save": 2, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "Attack ": 1, + "Willpower Save": 3, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "Attack ": 1, + "Willpower Save": 4, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "Attack ": 1, + "Willpower Save": 5, + "Divine Miracle Bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "Attack ": 2, + "Willpower Save": 6, + "Divine Miracle Bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "Attack ": 2, + "Willpower Save": 7, + "Divine Miracle Bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "Attack ": 2, + "Willpower Save": 8, + "Divine Miracle Bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "Attack ": 2, + "Willpower Save": 9, + "Divine Miracle Bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "Attack ": 2, + "Willpower Save": 10, + "Divine Miracle Bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "Attack ": 3, + "Willpower Save": 11, + "Divine Miracle Bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "Attack ": 3, + "Willpower Save": 12, + "Divine Miracle Bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "Attack ": 4, + "Willpower Save": 13, + "Divine Miracle Bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162810.mjs b/.history/module/config/characteristic-tables_20241208162810.mjs new file mode 100644 index 0000000..0d759db --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162810.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "Willpower Save": -5, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "Willpower Save": -4, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "Willpower Save": 1, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "Willpower Save": 2, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "Willpower Save": 3, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "Willpower Save": 4, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "Willpower Save": 5, + "Divine Miracle Bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "Willpower Save": 6, + "Divine Miracle Bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "Willpower Save": 7, + "Divine Miracle Bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "Willpower Save": 8, + "Divine Miracle Bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "Willpower Save": 9, + "Divine Miracle Bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "Willpower Save": 10, + "Divine Miracle Bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "Willpower Save": 11, + "Divine Miracle Bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "Willpower Save": 12, + "Divine Miracle Bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "Willpower Save": 13, + "Divine Miracle Bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162820.mjs b/.history/module/config/characteristic-tables_20241208162820.mjs new file mode 100644 index 0000000..ee33e0a --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162820.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "Willpower Save": -5, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "Willpower Save": -4, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "Willpower Save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "Willpower Save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "Willpower Save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "Willpower Save": 0, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "Willpower Save": 1, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "Willpower Save": 2, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "Willpower Save": 3, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "Willpower Save": 4, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "Willpower Save": 5, + "Divine Miracle Bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "Willpower Save": 6, + "Divine Miracle Bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "Willpower Save": 7, + "Divine Miracle Bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "Willpower Save": 8, + "Divine Miracle Bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "Willpower Save": 9, + "Divine Miracle Bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "Willpower Save": 10, + "Divine Miracle Bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "Willpower Save": 11, + "Divine Miracle Bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "Willpower Save": 12, + "Divine Miracle Bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "Divine Miracle Bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162821.mjs b/.history/module/config/characteristic-tables_20241208162821.mjs new file mode 100644 index 0000000..a7330c5 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162821.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "Divine Miracle Bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "Divine Miracle Bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "Divine Miracle Bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "Divine Miracle Bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "Divine Miracle Bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "Divine Miracle Bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "Divine Miracle Bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "Divine Miracle Bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "Divine Miracle Bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "Divine Miracle Bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "Divine Miracle Bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "Divine Miracle Bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208162835.mjs b/.history/module/config/characteristic-tables_20241208162835.mjs new file mode 100644 index 0000000..83dfed0 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208162835.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163012.mjs b/.history/module/config/characteristic-tables_20241208163012.mjs new file mode 100644 index 0000000..83dfed0 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163012.mjs @@ -0,0 +1,1291 @@ +import { CHARACTERISTICS } from "./character.mjs"; + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163217.mjs b/.history/module/config/characteristic-tables_20241208163217.mjs new file mode 100644 index 0000000..38aef40 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163217.mjs @@ -0,0 +1,1290 @@ + +export const CHARACTERISTICS_TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163335.mjs b/.history/module/config/characteristic-tables_20241208163335.mjs new file mode 100644 index 0000000..66570a8 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163335.mjs @@ -0,0 +1,1290 @@ + +export const CHARACTERISTICSTABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163337.mjs b/.history/module/config/characteristic-tables_20241208163337.mjs new file mode 100644 index 0000000..875cd26 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163337.mjs @@ -0,0 +1,1290 @@ + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163646.mjs b/.history/module/config/characteristic-tables_20241208163646.mjs new file mode 100644 index 0000000..0a19cec --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163646.mjs @@ -0,0 +1,1290 @@ + +export const MAJOR + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163647.mjs b/.history/module/config/characteristic-tables_20241208163647.mjs new file mode 100644 index 0000000..4570d1b --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163647.mjs @@ -0,0 +1,1291 @@ + +export const MAJ +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163651.mjs b/.history/module/config/characteristic-tables_20241208163651.mjs new file mode 100644 index 0000000..0140db3 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163651.mjs @@ -0,0 +1,1296 @@ + +export const MAJOR = {Str + Int + Wis + Dex + Con + Cha} +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163706.mjs b/.history/module/config/characteristic-tables_20241208163706.mjs new file mode 100644 index 0000000..14a869c --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163706.mjs @@ -0,0 +1,1296 @@ + +export const MAJOR = {Str, + Int + Wis + Dex + Con + Cha} +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163712.mjs b/.history/module/config/characteristic-tables_20241208163712.mjs new file mode 100644 index 0000000..30b3c37 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163712.mjs @@ -0,0 +1,1296 @@ + +export const MAJOR = {Str, + Int, + Wis, + Dex, + Con, + Cha} +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163717.mjs b/.history/module/config/characteristic-tables_20241208163717.mjs new file mode 100644 index 0000000..c675ffa --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163717.mjs @@ -0,0 +1,1295 @@ + +export const MAJOR = {Str, Int, + Wis, + Dex, + Con, + Cha} +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163719.mjs b/.history/module/config/characteristic-tables_20241208163719.mjs new file mode 100644 index 0000000..8eefc02 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163719.mjs @@ -0,0 +1,1294 @@ + +export const MAJOR = {Str, Int, , + Dex, + Con, + Cha} +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163722.mjs b/.history/module/config/characteristic-tables_20241208163722.mjs new file mode 100644 index 0000000..bd25748 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163722.mjs @@ -0,0 +1,1294 @@ + +export const MAJOR = {Str, Int, Wis, Dex, Con, Cha} + Dex, + Con, + Cha} +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163728.mjs b/.history/module/config/characteristic-tables_20241208163728.mjs new file mode 100644 index 0000000..913f0d0 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163728.mjs @@ -0,0 +1,1291 @@ + +export const MAJOR = {Str, Int, Wis, Dex, Con, Cha} +sexport const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163730.mjs b/.history/module/config/characteristic-tables_20241208163730.mjs new file mode 100644 index 0000000..f0fbf06 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163730.mjs @@ -0,0 +1,1292 @@ + +export const MAJOR = {Str, Int, Wis, Dex, Con, Cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163733.mjs b/.history/module/config/characteristic-tables_20241208163733.mjs new file mode 100644 index 0000000..64ed10f --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163733.mjs @@ -0,0 +1,1292 @@ + +export const MAJOR = {str, Int, Wis, Dex, Con, Cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163735.mjs b/.history/module/config/characteristic-tables_20241208163735.mjs new file mode 100644 index 0000000..afd81c8 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163735.mjs @@ -0,0 +1,1292 @@ + +export const MAJOR = {str, int, Wis, Dex, Con, Cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163737.mjs b/.history/module/config/characteristic-tables_20241208163737.mjs new file mode 100644 index 0000000..846f6ea --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163737.mjs @@ -0,0 +1,1292 @@ + +export const MAJOR = {str, int, wis, Dex, Con, Cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163738.mjs b/.history/module/config/characteristic-tables_20241208163738.mjs new file mode 100644 index 0000000..f7ab44b --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163738.mjs @@ -0,0 +1,1292 @@ + +export const MAJOR = {str, int, wis, dex, Con, Cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163740.mjs b/.history/module/config/characteristic-tables_20241208163740.mjs new file mode 100644 index 0000000..d86b221 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163740.mjs @@ -0,0 +1,1292 @@ + +export const MAJOR = {str, int, wis, dex, con, Cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163742.mjs b/.history/module/config/characteristic-tables_20241208163742.mjs new file mode 100644 index 0000000..d70dce6 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163742.mjs @@ -0,0 +1,1292 @@ + +export const MAJOR = {str, int, wis, dex, con, cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208163745.mjs b/.history/module/config/characteristic-tables_20241208163745.mjs new file mode 100644 index 0000000..04587f7 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208163745.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = {str, int, wis, dex, con, cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204026.mjs b/.history/module/config/characteristic-tables_20241208204026.mjs new file mode 100644 index 0000000..b74f7fe --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204026.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = {"str," int, wis, dex, con, cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204027.mjs b/.history/module/config/characteristic-tables_20241208204027.mjs new file mode 100644 index 0000000..c50c416 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204027.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = {"str"," int, wis, dex, con, cha} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204038.mjs b/.history/module/config/characteristic-tables_20241208204038.mjs new file mode 100644 index 0000000..0499c95 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204038.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = {"str", "int", "wis", "dex", "con", "cha"} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204039.mjs b/.history/module/config/characteristic-tables_20241208204039.mjs new file mode 100644 index 0000000..0499c95 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204039.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = {"str", "int", "wis", "dex", "con", "cha"} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204040.mjs b/.history/module/config/characteristic-tables_20241208204040.mjs new file mode 100644 index 0000000..0499c95 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204040.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = {"str", "int", "wis", "dex", "con", "cha"} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204043.mjs b/.history/module/config/characteristic-tables_20241208204043.mjs new file mode 100644 index 0000000..ec409bb --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204043.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = "str", "int", "wis", "dex", "con", "cha"} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204044.mjs b/.history/module/config/characteristic-tables_20241208204044.mjs new file mode 100644 index 0000000..5b0fa9e --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204044.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = ["str", "int", "wis", "dex", "con", "cha"} + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204045.mjs b/.history/module/config/characteristic-tables_20241208204045.mjs new file mode 100644 index 0000000..9eb9579 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204045.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = ["str", "int", "wis", "dex", "con", "cha" + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204046.mjs b/.history/module/config/characteristic-tables_20241208204046.mjs new file mode 100644 index 0000000..ffd77e7 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204046.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = ["str", "int", "wis", "dex", "con", "cha"] + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204047.mjs b/.history/module/config/characteristic-tables_20241208204047.mjs new file mode 100644 index 0000000..ffd77e7 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204047.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = ["str", "int", "wis", "dex", "con", "cha"] + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/characteristic-tables_20241208204048.mjs b/.history/module/config/characteristic-tables_20241208204048.mjs new file mode 100644 index 0000000..ffd77e7 --- /dev/null +++ b/.history/module/config/characteristic-tables_20241208204048.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = ["str", "int", "wis", "dex", "con", "cha"] + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/.history/module/config/system_20241207230457.mjs b/.history/module/config/system_20241207230457.mjs new file mode 100644 index 0000000..ba9d9a0 --- /dev/null +++ b/.history/module/config/system_20241207230457.mjs @@ -0,0 +1,90 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const DICE_VALUE = Object.freeze({ + D4: "d4", + D6: "d6", + D8: "d8", + D10: "d10", + D12: "d12", +}) + +export const DICE_VALUES = ["0", "d4", "d6", "d8", "d10", "d12"] + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208155651.mjs b/.history/module/config/system_20241208155651.mjs new file mode 100644 index 0000000..4d15efb --- /dev/null +++ b/.history/module/config/system_20241208155651.mjs @@ -0,0 +1,91 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const DICE_VALUE = Object.freeze({ + D4: "d4", + D6: "d6", + D8: "d8", + D10: "d10", + D12: "d12", +}) + +export const DICE_VALUES = ["0", "d4", "d6", "d8", "d10", "d12"] + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208155652.mjs b/.history/module/config/system_20241208155652.mjs new file mode 100644 index 0000000..d1ecc27 --- /dev/null +++ b/.history/module/config/system_20241208155652.mjs @@ -0,0 +1,91 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const DICE_VALUE = Object.freeze({ + D4: "d4", + D6: "d6", + D8: "d8", + D10: "d10", + D12: "d12", +}) + +export const DICE_VALUES = ["0", "d4", "d6", "d8", "d10", "d12"] + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208161331.mjs b/.history/module/config/system_20241208161331.mjs new file mode 100644 index 0000000..707dadf --- /dev/null +++ b/.history/module/config/system_20241208161331.mjs @@ -0,0 +1,89 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const DICE_VALUE = Object.freeze({ + D4: "d4", + D6: "d6", + D8: "d8", + D10: "d10", + D12: "d12", +}) + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208161335.mjs b/.history/module/config/system_20241208161335.mjs new file mode 100644 index 0000000..1547706 --- /dev/null +++ b/.history/module/config/system_20241208161335.mjs @@ -0,0 +1,81 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208161336.mjs b/.history/module/config/system_20241208161336.mjs new file mode 100644 index 0000000..1547706 --- /dev/null +++ b/.history/module/config/system_20241208161336.mjs @@ -0,0 +1,81 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208161341.mjs b/.history/module/config/system_20241208161341.mjs new file mode 100644 index 0000000..1547706 --- /dev/null +++ b/.history/module/config/system_20241208161341.mjs @@ -0,0 +1,81 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163232.mjs b/.history/module/config/system_20241208163232.mjs new file mode 100644 index 0000000..bebfb51 --- /dev/null +++ b/.history/module/config/system_20241208163232.mjs @@ -0,0 +1,81 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163236.mjs b/.history/module/config/system_20241208163236.mjs new file mode 100644 index 0000000..0883825 --- /dev/null +++ b/.history/module/config/system_20241208163236.mjs @@ -0,0 +1,81 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163237.mjs b/.history/module/config/system_20241208163237.mjs new file mode 100644 index 0000000..9425743 --- /dev/null +++ b/.history/module/config/system_20241208163237.mjs @@ -0,0 +1,81 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHA +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163239.mjs b/.history/module/config/system_20241208163239.mjs new file mode 100644 index 0000000..3953333 --- /dev/null +++ b/.history/module/config/system_20241208163239.mjs @@ -0,0 +1,81 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristics.mjs" +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163243.mjs b/.history/module/config/system_20241208163243.mjs new file mode 100644 index 0000000..23cd58f --- /dev/null +++ b/.history/module/config/system_20241208163243.mjs @@ -0,0 +1,81 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristics-tables.mjs" +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163245.mjs b/.history/module/config/system_20241208163245.mjs new file mode 100644 index 0000000..3791ef3 --- /dev/null +++ b/.history/module/config/system_20241208163245.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163247.mjs b/.history/module/config/system_20241208163247.mjs new file mode 100644 index 0000000..3791ef3 --- /dev/null +++ b/.history/module/config/system_20241208163247.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163248.mjs b/.history/module/config/system_20241208163248.mjs new file mode 100644 index 0000000..3791ef3 --- /dev/null +++ b/.history/module/config/system_20241208163248.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163253.mjs b/.history/module/config/system_20241208163253.mjs new file mode 100644 index 0000000..6b9d310 --- /dev/null +++ b/.history/module/config/system_20241208163253.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICSCHAR_TABLES from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163259.mjs b/.history/module/config/system_20241208163259.mjs new file mode 100644 index 0000000..95fcc75 --- /dev/null +++ b/.history/module/config/system_20241208163259.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as SYSTABLES from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163300.mjs b/.history/module/config/system_20241208163300.mjs new file mode 100644 index 0000000..95fcc75 --- /dev/null +++ b/.history/module/config/system_20241208163300.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as SYSTABLES from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163301.mjs b/.history/module/config/system_20241208163301.mjs new file mode 100644 index 0000000..95fcc75 --- /dev/null +++ b/.history/module/config/system_20241208163301.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as SYSTABLES from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163304.mjs b/.history/module/config/system_20241208163304.mjs new file mode 100644 index 0000000..9df09b0 --- /dev/null +++ b/.history/module/config/system_20241208163304.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHAR from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163306.mjs b/.history/module/config/system_20241208163306.mjs new file mode 100644 index 0000000..3791ef3 --- /dev/null +++ b/.history/module/config/system_20241208163306.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristics-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163314.mjs b/.history/module/config/system_20241208163314.mjs new file mode 100644 index 0000000..56bc237 --- /dev/null +++ b/.history/module/config/system_20241208163314.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163315.mjs b/.history/module/config/system_20241208163315.mjs new file mode 100644 index 0000000..56bc237 --- /dev/null +++ b/.history/module/config/system_20241208163315.mjs @@ -0,0 +1,82 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163322.mjs b/.history/module/config/system_20241208163322.mjs new file mode 100644 index 0000000..a4b46dd --- /dev/null +++ b/.history/module/config/system_20241208163322.mjs @@ -0,0 +1,83 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163323.mjs b/.history/module/config/system_20241208163323.mjs new file mode 100644 index 0000000..b31c5aa --- /dev/null +++ b/.history/module/config/system_20241208163323.mjs @@ -0,0 +1,83 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163324.mjs b/.history/module/config/system_20241208163324.mjs new file mode 100644 index 0000000..b31c5aa --- /dev/null +++ b/.history/module/config/system_20241208163324.mjs @@ -0,0 +1,83 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163327.mjs b/.history/module/config/system_20241208163327.mjs new file mode 100644 index 0000000..56f1dc7 --- /dev/null +++ b/.history/module/config/system_20241208163327.mjs @@ -0,0 +1,83 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS., + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163328.mjs b/.history/module/config/system_20241208163328.mjs new file mode 100644 index 0000000..ef9967c --- /dev/null +++ b/.history/module/config/system_20241208163328.mjs @@ -0,0 +1,83 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS. + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163330.mjs b/.history/module/config/system_20241208163330.mjs new file mode 100644 index 0000000..7f530c7 --- /dev/null +++ b/.history/module/config/system_20241208163330.mjs @@ -0,0 +1,83 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163331.mjs b/.history/module/config/system_20241208163331.mjs new file mode 100644 index 0000000..7f530c7 --- /dev/null +++ b/.history/module/config/system_20241208163331.mjs @@ -0,0 +1,83 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163752.mjs b/.history/module/config/system_20241208163752.mjs new file mode 100644 index 0000000..894fa72 --- /dev/null +++ b/.history/module/config/system_20241208163752.mjs @@ -0,0 +1,84 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163755.mjs b/.history/module/config/system_20241208163755.mjs new file mode 100644 index 0000000..e2e543c --- /dev/null +++ b/.history/module/config/system_20241208163755.mjs @@ -0,0 +1,84 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHA + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163757.mjs b/.history/module/config/system_20241208163757.mjs new file mode 100644 index 0000000..54edd7a --- /dev/null +++ b/.history/module/config/system_20241208163757.mjs @@ -0,0 +1,84 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARA + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163758.mjs b/.history/module/config/system_20241208163758.mjs new file mode 100644 index 0000000..b126778 --- /dev/null +++ b/.history/module/config/system_20241208163758.mjs @@ -0,0 +1,84 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTER + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163804.mjs b/.history/module/config/system_20241208163804.mjs new file mode 100644 index 0000000..b8a758d --- /dev/null +++ b/.history/module/config/system_20241208163804.mjs @@ -0,0 +1,84 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJ + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163805.mjs b/.history/module/config/system_20241208163805.mjs new file mode 100644 index 0000000..902dd15 --- /dev/null +++ b/.history/module/config/system_20241208163805.mjs @@ -0,0 +1,84 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, s + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163806.mjs b/.history/module/config/system_20241208163806.mjs new file mode 100644 index 0000000..902dd15 --- /dev/null +++ b/.history/module/config/system_20241208163806.mjs @@ -0,0 +1,84 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, s + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241208163807.mjs b/.history/module/config/system_20241208163807.mjs new file mode 100644 index 0000000..573dac8 --- /dev/null +++ b/.history/module/config/system_20241208163807.mjs @@ -0,0 +1,84 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, + SAVES: CHARACTER.SAVES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241210075418.mjs b/.history/module/config/system_20241210075418.mjs new file mode 100644 index 0000000..6b38f2e --- /dev/null +++ b/.history/module/config/system_20241210075418.mjs @@ -0,0 +1,85 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, + SAVES: CHARACTER.SAVES, + CHALLENGES: CHARACTER.CHALLENGES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241210075422.mjs b/.history/module/config/system_20241210075422.mjs new file mode 100644 index 0000000..6b38f2e --- /dev/null +++ b/.history/module/config/system_20241210075422.mjs @@ -0,0 +1,85 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, + SAVES: CHARACTER.SAVES, + CHALLENGES: CHARACTER.CHALLENGES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241217070425.mjs b/.history/module/config/system_20241217070425.mjs new file mode 100644 index 0000000..736e267 --- /dev/null +++ b/.history/module/config/system_20241217070425.mjs @@ -0,0 +1,86 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, + SAVES: CHARACTER.SAVES, + CHALLENGES: CHARACTER.CHALLENGES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + WEAPON.COMBAT_PROGRESSION_DICE + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241217070432.mjs b/.history/module/config/system_20241217070432.mjs new file mode 100644 index 0000000..e8ae4b3 --- /dev/null +++ b/.history/module/config/system_20241217070432.mjs @@ -0,0 +1,86 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, + SAVES: CHARACTER.SAVES, + CHALLENGES: CHARACTER.CHALLENGES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + COMBAT_PROGRESSION_DICE: WEAPON.COMBAT_PROGRESSION_DICE + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/system_20241217070434.mjs b/.history/module/config/system_20241217070434.mjs new file mode 100644 index 0000000..9ed5a0f --- /dev/null +++ b/.history/module/config/system_20241217070434.mjs @@ -0,0 +1,86 @@ +import * as CHARACTER from "./character.mjs" +import * as WEAPON from "./weapon.mjs" +import * as ARMOR from "./armor.mjs" +import * as SPELL from "./spell.mjs" +import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" + +export const SYSTEM_ID = "fvtt-lethal-fantasy" +export const DEV_MODE = false + +export const ROLL_TYPE = Object.freeze({ + SAVE: "save", + RESOURCE: "resource", + DAMAGE: "damage", + ATTACK: "attack", +}) + +export const MONEY = { + tinbit: { + id: "tinbit", + abbrev: "tb", + label: "LETHALFANTASY.Money.Tinbits", + valuetb: 1 + }, + copper: { + id: "copper", + abbrev: "cp", + label: "LETHALFANTASY.Money.Coppers", + valuetb: 10 + }, + silver: { + id: "silver", + abbrev: "sp", + label: "LETHALFANTASY.Money.Silvers", + valuetb: 100 + }, + gold: { + id: "gold", + abbrev: "gp", + label: "LETHALFANTASY.Money.Golds", + valuetb: 1000 + }, + platinum: { + id: "platinum", + abbrev: "pp", + label: "LETHALFANTASY.Money.Platinums", + valuetb: 10000 + } +} + +export const ASCII = ` +······················································································································ +: : +:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : +:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : +:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : +:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : +:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : +: : +······················································································································ +` + +/** + * Include all constant definitions within the SYSTEM global export + * @type {Object} + */ +export const SYSTEM = { + id: SYSTEM_ID, + CHARACTERISTICS: CHARACTER.CHARACTERISTICS, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, + SAVES: CHARACTER.SAVES, + CHALLENGES: CHARACTER.CHALLENGES, + SKILL_CATEGORY: SKILL.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, + SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, + COMBAT_PROGRESSION_DICE: WEAPON.COMBAT_PROGRESSION_DICE, + MONEY, + ASCII, + ROLL_TYPE, + DEV_MODE, +} diff --git a/.history/module/config/weapon_20241207230317.mjs b/.history/module/config/weapon_20241207230317.mjs new file mode 100644 index 0000000..f68f810 --- /dev/null +++ b/.history/module/config/weapon_20241207230317.mjs @@ -0,0 +1,6 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + diff --git a/.history/module/config/weapon_20241208155340.mjs b/.history/module/config/weapon_20241208155340.mjs new file mode 100644 index 0000000..ef89b07 --- /dev/null +++ b/.history/module/config/weapon_20241208155340.mjs @@ -0,0 +1,9 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export conso WEAPON_CLASS = { + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155343.mjs b/.history/module/config/weapon_20241208155343.mjs new file mode 100644 index 0000000..9876cbb --- /dev/null +++ b/.history/module/config/weapon_20241208155343.mjs @@ -0,0 +1,9 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155345.mjs b/.history/module/config/weapon_20241208155345.mjs new file mode 100644 index 0000000..bd0d1d4 --- /dev/null +++ b/.history/module/config/weapon_20241208155345.mjs @@ -0,0 +1,9 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + Weapon Class +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155348.mjs b/.history/module/config/weapon_20241208155348.mjs new file mode 100644 index 0000000..05ccdc5 --- /dev/null +++ b/.history/module/config/weapon_20241208155348.mjs @@ -0,0 +1,9 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155354.mjs b/.history/module/config/weapon_20241208155354.mjs new file mode 100644 index 0000000..0334950 --- /dev/null +++ b/.history/module/config/weapon_20241208155354.mjs @@ -0,0 +1,9 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155356.mjs b/.history/module/config/weapon_20241208155356.mjs new file mode 100644 index 0000000..cccb867 --- /dev/null +++ b/.history/module/config/weapon_20241208155356.mjs @@ -0,0 +1,9 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155357.mjs b/.history/module/config/weapon_20241208155357.mjs new file mode 100644 index 0000000..cccb867 --- /dev/null +++ b/.history/module/config/weapon_20241208155357.mjs @@ -0,0 +1,9 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155358.mjs b/.history/module/config/weapon_20241208155358.mjs new file mode 100644 index 0000000..2955092 --- /dev/null +++ b/.history/module/config/weapon_20241208155358.mjs @@ -0,0 +1,10 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155400.mjs b/.history/module/config/weapon_20241208155400.mjs new file mode 100644 index 0000000..a915d0a --- /dev/null +++ b/.history/module/config/weapon_20241208155400.mjs @@ -0,0 +1,10 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblades": "LETHALFANTASY.Weapon.WeaponClass.shortblades", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155414.mjs b/.history/module/config/weapon_20241208155414.mjs new file mode 100644 index 0000000..10a9fdf --- /dev/null +++ b/.history/module/config/weapon_20241208155414.mjs @@ -0,0 +1,11 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblades": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155416.mjs b/.history/module/config/weapon_20241208155416.mjs new file mode 100644 index 0000000..bc791ec --- /dev/null +++ b/.history/module/config/weapon_20241208155416.mjs @@ -0,0 +1,11 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblades": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "med" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155418.mjs b/.history/module/config/weapon_20241208155418.mjs new file mode 100644 index 0000000..44bc9d8 --- /dev/null +++ b/.history/module/config/weapon_20241208155418.mjs @@ -0,0 +1,12 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblades": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "mediumblades": "LETHALFANTASY.Weapon.WeaponClass.mediumblades", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155421.mjs b/.history/module/config/weapon_20241208155421.mjs new file mode 100644 index 0000000..759550e --- /dev/null +++ b/.history/module/config/weapon_20241208155421.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblades": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "mediumblades": "LETHALFANTASY.Weapon.WeaponClass.mediumblades", + "axes": "LETHALFANTASY.Weapon.WeaponClass.axes", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155431.mjs b/.history/module/config/weapon_20241208155431.mjs new file mode 100644 index 0000000..e6e9dfd --- /dev/null +++ b/.history/module/config/weapon_20241208155431.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblades": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "mediumblades": "LETHALFANTASY.Weapon.WeaponClass.mediumblades", + "axes": "LETHALFANTASY.Weapon.WeaponClass.axes", + "hammers" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155433.mjs b/.history/module/config/weapon_20241208155433.mjs new file mode 100644 index 0000000..298457d --- /dev/null +++ b/.history/module/config/weapon_20241208155433.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblades": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblades": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "mediumblades": "LETHALFANTASY.Weapon.WeaponClass.mediumblades", + "axes": "LETHALFANTASY.Weapon.WeaponClass.axes", + "hammers": "LETHALFANTASY.Weapon.WeaponClass.hammers", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155438.mjs b/.history/module/config/weapon_20241208155438.mjs new file mode 100644 index 0000000..58d57ea --- /dev/null +++ b/.history/module/config/weapon_20241208155438.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblades", + "axes": "LETHALFANTASY.Weapon.WeaponClass.axes", + "hammers": "LETHALFANTASY.Weapon.WeaponClass.hammers", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155440.mjs b/.history/module/config/weapon_20241208155440.mjs new file mode 100644 index 0000000..b654624 --- /dev/null +++ b/.history/module/config/weapon_20241208155440.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblades", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axes", + "hammers": "LETHALFANTASY.Weapon.WeaponClass.hammers", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155441.mjs b/.history/module/config/weapon_20241208155441.mjs new file mode 100644 index 0000000..904d615 --- /dev/null +++ b/.history/module/config/weapon_20241208155441.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblades", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblades", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axes", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammers", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155444.mjs b/.history/module/config/weapon_20241208155444.mjs new file mode 100644 index 0000000..8ccae50 --- /dev/null +++ b/.history/module/config/weapon_20241208155444.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblades", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblades", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axes", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammers", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155447.mjs b/.history/module/config/weapon_20241208155447.mjs new file mode 100644 index 0000000..9c673b7 --- /dev/null +++ b/.history/module/config/weapon_20241208155447.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammers", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155449.mjs b/.history/module/config/weapon_20241208155449.mjs new file mode 100644 index 0000000..9c673b7 --- /dev/null +++ b/.history/module/config/weapon_20241208155449.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammers", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155453.mjs b/.history/module/config/weapon_20241208155453.mjs new file mode 100644 index 0000000..252eb84 --- /dev/null +++ b/.history/module/config/weapon_20241208155453.mjs @@ -0,0 +1,13 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155454.mjs b/.history/module/config/weapon_20241208155454.mjs new file mode 100644 index 0000000..fb39dd0 --- /dev/null +++ b/.history/module/config/weapon_20241208155454.mjs @@ -0,0 +1,14 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155502.mjs b/.history/module/config/weapon_20241208155502.mjs new file mode 100644 index 0000000..51f2949 --- /dev/null +++ b/.history/module/config/weapon_20241208155502.mjs @@ -0,0 +1,14 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155508.mjs b/.history/module/config/weapon_20241208155508.mjs new file mode 100644 index 0000000..244cb17 --- /dev/null +++ b/.history/module/config/weapon_20241208155508.mjs @@ -0,0 +1,15 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155510.mjs b/.history/module/config/weapon_20241208155510.mjs new file mode 100644 index 0000000..2f5e0a2 --- /dev/null +++ b/.history/module/config/weapon_20241208155510.mjs @@ -0,0 +1,15 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "fla" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155518.mjs b/.history/module/config/weapon_20241208155518.mjs new file mode 100644 index 0000000..0e39d1b --- /dev/null +++ b/.history/module/config/weapon_20241208155518.mjs @@ -0,0 +1,15 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155520.mjs b/.history/module/config/weapon_20241208155520.mjs new file mode 100644 index 0000000..9d38dba --- /dev/null +++ b/.history/module/config/weapon_20241208155520.mjs @@ -0,0 +1,16 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155526.mjs b/.history/module/config/weapon_20241208155526.mjs new file mode 100644 index 0000000..e8332c6 --- /dev/null +++ b/.history/module/config/weapon_20241208155526.mjs @@ -0,0 +1,16 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155528.mjs b/.history/module/config/weapon_20241208155528.mjs new file mode 100644 index 0000000..a1ae89f --- /dev/null +++ b/.history/module/config/weapon_20241208155528.mjs @@ -0,0 +1,16 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155534.mjs b/.history/module/config/weapon_20241208155534.mjs new file mode 100644 index 0000000..d166d59 --- /dev/null +++ b/.history/module/config/weapon_20241208155534.mjs @@ -0,0 +1,18 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "slingshot": "LETHALFANTASY.Weapon.WeaponClass.slingshot", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155536.mjs b/.history/module/config/weapon_20241208155536.mjs new file mode 100644 index 0000000..41e6ac8 --- /dev/null +++ b/.history/module/config/weapon_20241208155536.mjs @@ -0,0 +1,18 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "slingshot": "LETHALFANTASY.Weapon.WeaponClass.sling", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155540.mjs b/.history/module/config/weapon_20241208155540.mjs new file mode 100644 index 0000000..7225691 --- /dev/null +++ b/.history/module/config/weapon_20241208155540.mjs @@ -0,0 +1,18 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155549.mjs b/.history/module/config/weapon_20241208155549.mjs new file mode 100644 index 0000000..506f9da --- /dev/null +++ b/.history/module/config/weapon_20241208155549.mjs @@ -0,0 +1,19 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "th" + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155551.mjs b/.history/module/config/weapon_20241208155551.mjs new file mode 100644 index 0000000..e1396c4 --- /dev/null +++ b/.history/module/config/weapon_20241208155551.mjs @@ -0,0 +1,20 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155557.mjs b/.history/module/config/weapon_20241208155557.mjs new file mode 100644 index 0000000..ea3b0e7 --- /dev/null +++ b/.history/module/config/weapon_20241208155557.mjs @@ -0,0 +1,20 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "pole" + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155559.mjs b/.history/module/config/weapon_20241208155559.mjs new file mode 100644 index 0000000..6b34d17 --- /dev/null +++ b/.history/module/config/weapon_20241208155559.mjs @@ -0,0 +1,20 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155608.mjs b/.history/module/config/weapon_20241208155608.mjs new file mode 100644 index 0000000..e3d65ef --- /dev/null +++ b/.history/module/config/weapon_20241208155608.mjs @@ -0,0 +1,21 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155609.mjs b/.history/module/config/weapon_20241208155609.mjs new file mode 100644 index 0000000..55b3fc0 --- /dev/null +++ b/.history/module/config/weapon_20241208155609.mjs @@ -0,0 +1,21 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155610.mjs b/.history/module/config/weapon_20241208155610.mjs new file mode 100644 index 0000000..7c0f369 --- /dev/null +++ b/.history/module/config/weapon_20241208155610.mjs @@ -0,0 +1,21 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" + +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155611.mjs b/.history/module/config/weapon_20241208155611.mjs new file mode 100644 index 0000000..553588a --- /dev/null +++ b/.history/module/config/weapon_20241208155611.mjs @@ -0,0 +1,20 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155612.mjs b/.history/module/config/weapon_20241208155612.mjs new file mode 100644 index 0000000..553588a --- /dev/null +++ b/.history/module/config/weapon_20241208155612.mjs @@ -0,0 +1,20 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155640.mjs b/.history/module/config/weapon_20241208155640.mjs new file mode 100644 index 0000000..553588a --- /dev/null +++ b/.history/module/config/weapon_20241208155640.mjs @@ -0,0 +1,20 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155641.mjs b/.history/module/config/weapon_20241208155641.mjs new file mode 100644 index 0000000..553588a --- /dev/null +++ b/.history/module/config/weapon_20241208155641.mjs @@ -0,0 +1,20 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241208155642.mjs b/.history/module/config/weapon_20241208155642.mjs new file mode 100644 index 0000000..553588a --- /dev/null +++ b/.history/module/config/weapon_20241208155642.mjs @@ -0,0 +1,20 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070347.mjs b/.history/module/config/weapon_20241217070347.mjs new file mode 100644 index 0000000..bf577e5 --- /dev/null +++ b/.history/module/config/weapon_20241217070347.mjs @@ -0,0 +1,23 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + +} +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070351.mjs b/.history/module/config/weapon_20241217070351.mjs new file mode 100644 index 0000000..ed10016 --- /dev/null +++ b/.history/module/config/weapon_20241217070351.mjs @@ -0,0 +1,29 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + "d4": "LETHALFANTASY.Weapon.CombatProgressionDice.d4", + "d6": "LETHALFANTASY.Weapon.CombatProgressionDice.d6", + "d8": "LETHALFANTASY.Weapon.CombatProgressionDice.d8", + "d10": "LETHALFANTASY.Weapon.CombatProgressionDice.d10", + "d12": "LETHALFANTASY.Weapon.CombatProgressionDice.d12", + "d20": "LETHALFANTASY.Weapon.CombatProgressionDice.d20" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070352.mjs b/.history/module/config/weapon_20241217070352.mjs new file mode 100644 index 0000000..ed10016 --- /dev/null +++ b/.history/module/config/weapon_20241217070352.mjs @@ -0,0 +1,29 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + "d4": "LETHALFANTASY.Weapon.CombatProgressionDice.d4", + "d6": "LETHALFANTASY.Weapon.CombatProgressionDice.d6", + "d8": "LETHALFANTASY.Weapon.CombatProgressionDice.d8", + "d10": "LETHALFANTASY.Weapon.CombatProgressionDice.d10", + "d12": "LETHALFANTASY.Weapon.CombatProgressionDice.d12", + "d20": "LETHALFANTASY.Weapon.CombatProgressionDice.d20" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070357.mjs b/.history/module/config/weapon_20241217070357.mjs new file mode 100644 index 0000000..2912a9c --- /dev/null +++ b/.history/module/config/weapon_20241217070357.mjs @@ -0,0 +1,29 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + "d4": "d4", + "d6": "LETHALFANTASY.Weapon.CombatProgressionDice.d6", + "d8": "LETHALFANTASY.Weapon.CombatProgressionDice.d8", + "d10": "LETHALFANTASY.Weapon.CombatProgressionDice.d10", + "d12": "LETHALFANTASY.Weapon.CombatProgressionDice.d12", + "d20": "LETHALFANTASY.Weapon.CombatProgressionDice.d20" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070400.mjs b/.history/module/config/weapon_20241217070400.mjs new file mode 100644 index 0000000..baf6837 --- /dev/null +++ b/.history/module/config/weapon_20241217070400.mjs @@ -0,0 +1,29 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + "d4": "d4", + "d6": "d6", + "d8": "LETHALFANTASY.Weapon.CombatProgressionDice.d8", + "d10": "LETHALFANTASY.Weapon.CombatProgressionDice.d10", + "d12": "LETHALFANTASY.Weapon.CombatProgressionDice.d12", + "d20": "LETHALFANTASY.Weapon.CombatProgressionDice.d20" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070403.mjs b/.history/module/config/weapon_20241217070403.mjs new file mode 100644 index 0000000..34f8603 --- /dev/null +++ b/.history/module/config/weapon_20241217070403.mjs @@ -0,0 +1,29 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + "d4": "d4", + "d6": "d6", + "d8": "d8", + "d10": "LETHALFANTASY.Weapon.CombatProgressionDice.d10", + "d12": "LETHALFANTASY.Weapon.CombatProgressionDice.d12", + "d20": "LETHALFANTASY.Weapon.CombatProgressionDice.d20" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070406.mjs b/.history/module/config/weapon_20241217070406.mjs new file mode 100644 index 0000000..351a9b2 --- /dev/null +++ b/.history/module/config/weapon_20241217070406.mjs @@ -0,0 +1,29 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + "d4": "d4", + "d6": "d6", + "d8": "d8", + "d10": "d10", + "d12": "LETHALFANTASY.Weapon.CombatProgressionDice.d12", + "d20": "LETHALFANTASY.Weapon.CombatProgressionDice.d20" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070409.mjs b/.history/module/config/weapon_20241217070409.mjs new file mode 100644 index 0000000..432ca5a --- /dev/null +++ b/.history/module/config/weapon_20241217070409.mjs @@ -0,0 +1,29 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + "d4": "d4", + "d6": "d6", + "d8": "d8", + "d10": "d10", + "d12": "d12", + "d20": "LETHALFANTASY.Weapon.CombatProgressionDice.d20" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/config/weapon_20241217070412.mjs b/.history/module/config/weapon_20241217070412.mjs new file mode 100644 index 0000000..0fc250f --- /dev/null +++ b/.history/module/config/weapon_20241217070412.mjs @@ -0,0 +1,29 @@ + +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + +export const COMBAT_PROGRESSION_DICE = { + "d4": "d4", + "d6": "d6", + "d8": "d8", + "d10": "d10", + "d12": "d12", + "d20": "d20" +} + +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/.history/module/documents/item_20241206134814.mjs b/.history/module/documents/item_20241206134814.mjs new file mode 100644 index 0000000..3b4a582 --- /dev/null +++ b/.history/module/documents/item_20241206134814.mjs @@ -0,0 +1,19 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp" +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241209231729.mjs b/.history/module/documents/item_20241209231729.mjs new file mode 100644 index 0000000..125f9bc --- /dev/null +++ b/.history/module/documents/item_20241209231729.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241209231731.mjs b/.history/module/documents/item_20241209231731.mjs new file mode 100644 index 0000000..5d0489b --- /dev/null +++ b/.history/module/documents/item_20241209231731.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241209231733.mjs b/.history/module/documents/item_20241209231733.mjs new file mode 100644 index 0000000..84f4593 --- /dev/null +++ b/.history/module/documents/item_20241209231733.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + mira +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241209231735.mjs b/.history/module/documents/item_20241209231735.mjs new file mode 100644 index 0000000..1974452 --- /dev/null +++ b/.history/module/documents/item_20241209231735.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + miracle +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241209231739.mjs b/.history/module/documents/item_20241209231739.mjs new file mode 100644 index 0000000..ce9f0c3 --- /dev/null +++ b/.history/module/documents/item_20241209231739.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + miracle: "systems/fvtt-lethal-fantasy/assets/icons/icon_miracle.webp", +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241209231740.mjs b/.history/module/documents/item_20241209231740.mjs new file mode 100644 index 0000000..4e0151e --- /dev/null +++ b/.history/module/documents/item_20241209231740.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + miracle: "systems/fvtt-lethal-fantasy/assets/icons/icon_miracle.webp" +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241209231806.mjs b/.history/module/documents/item_20241209231806.mjs new file mode 100644 index 0000000..4e0151e --- /dev/null +++ b/.history/module/documents/item_20241209231806.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + miracle: "systems/fvtt-lethal-fantasy/assets/icons/icon_miracle.webp" +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241217065944.mjs b/.history/module/documents/item_20241217065944.mjs new file mode 100644 index 0000000..0be7646 --- /dev/null +++ b/.history/module/documents/item_20241217065944.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + vulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + miracle: "systems/fvtt-lethal-fantasy/assets/icons/icon_miracle.webp" +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241217065947.mjs b/.history/module/documents/item_20241217065947.mjs new file mode 100644 index 0000000..6e1bceb --- /dev/null +++ b/.history/module/documents/item_20241217065947.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + vulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_vulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + miracle: "systems/fvtt-lethal-fantasy/assets/icons/icon_miracle.webp" +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/documents/item_20241217065948.mjs b/.history/module/documents/item_20241217065948.mjs new file mode 100644 index 0000000..6e1bceb --- /dev/null +++ b/.history/module/documents/item_20241217065948.mjs @@ -0,0 +1,20 @@ +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + vulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_vulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", + miracle: "systems/fvtt-lethal-fantasy/assets/icons/icon_miracle.webp" +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/.history/module/models/_module_20241201145936.mjs b/.history/module/models/_module_20241201145936.mjs new file mode 100644 index 0000000..f6af99a --- /dev/null +++ b/.history/module/models/_module_20241201145936.mjs @@ -0,0 +1,11 @@ +export { default as LethalFantasyCharacter } from "./character.mjs" +export { default as LethalFantasyOpponent } from "./opponent.mjs" +export { default as LethalFantasyWeapon } from "./weapon.mjs" +export { default as LethalFantasySpell } from "./spell.mjs" +export { default as LethalFantasySkill } from "./skill.mjs" +export { default as LethalFantasyArmor } from "./armor.mjs" +export { default as LethalFantasyShield } from "./shield.mjs" +export { default as LethalFantasyGift } from "./gift.mjs" +export { default as LethalFantasyVulnerability } from "./vulnerability.mjs" +export { default as LethalFantasySave } from "./save.mjs" +export { default as LethalFantasyEquipment } from "./equipment.mjs" diff --git a/.history/module/models/_module_20241209151101.mjs b/.history/module/models/_module_20241209151101.mjs new file mode 100644 index 0000000..898449d --- /dev/null +++ b/.history/module/models/_module_20241209151101.mjs @@ -0,0 +1,12 @@ +export { default as LethalFantasyCharacter } from "./character.mjs" +export { default as LethalFantasyOpponent } from "./opponent.mjs" +export { default as LethalFantasyWeapon } from "./weapon.mjs" +export { default as LethalFantasySpell } from "./spell.mjs" +export { default as LethalFantasySkill } from "./skill.mjs" +export { default as LethalFantasyArmor } from "./armor.mjs" +export { default as LethalFantasyShield } from "./shield.mjs" +export { default as LethalFantasyGift } from "./gift.mjs" +export { default as LethalFantasyVulnerability } from "./vulnerability.mjs" +export { default as LethalFantasySave } from "./save.mjs" +export { default as LethalFantasyEquipment } from "./equipment.mjs" + diff --git a/.history/module/models/_module_20241209151102.mjs b/.history/module/models/_module_20241209151102.mjs new file mode 100644 index 0000000..fe0f8c3 --- /dev/null +++ b/.history/module/models/_module_20241209151102.mjs @@ -0,0 +1,12 @@ +export { default as LethalFantasyCharacter } from "./character.mjs" +export { default as LethalFantasyOpponent } from "./opponent.mjs" +export { default as LethalFantasyWeapon } from "./weapon.mjs" +export { default as LethalFantasySpell } from "./spell.mjs" +export { default as LethalFantasySkill } from "./skill.mjs" +export { default as LethalFantasyArmor } from "./armor.mjs" +export { default as LethalFantasyShield } from "./shield.mjs" +export { default as LethalFantasyGift } from "./gift.mjs" +export { default as LethalFantasyVulnerability } from "./vulnerability.mjs" +export { default as LethalFantasySave } from "./save.mjs" +export { default as LethalFantasyEquipment } from "./equipment.mjs" +export { default as LethalFantasyMiracle } from "./miracle.mjs" diff --git a/.history/module/models/_module_20241210070822.mjs b/.history/module/models/_module_20241210070822.mjs new file mode 100644 index 0000000..ba701cd --- /dev/null +++ b/.history/module/models/_module_20241210070822.mjs @@ -0,0 +1,12 @@ +export { default as LethalFantasyCharacter } from "./character.mjs" +export { default as LethalFantasyOpponent } from "./opponent.mjs" +export { default as LethalFantasyWeapon } from "./weapon.mjs" +export { default as LethalFantasySpell } from "./spell.mjs" +export { default as LethalFantasySkill } from "./skill.mjs" +export { default as LethalFantasyArmor } from "./armor.mjs" +export { default as LethalFantasyShield } from "./shield.mjs" +export { default as LethalFantasyGift } from "./gift.mjs" +export { default as LethalFantasyVulnerability } from "./vulnerability.mjs" +export { default as LethalFantasySave } from "./save.mjs" +export { default as LethalFantasyEquipment } from "./equipment.mjs" +export { default as LethalFantasyMiracle } from "./miracle.mjs"w diff --git a/.history/module/models/_module_20241210070823.mjs b/.history/module/models/_module_20241210070823.mjs new file mode 100644 index 0000000..fe0f8c3 --- /dev/null +++ b/.history/module/models/_module_20241210070823.mjs @@ -0,0 +1,12 @@ +export { default as LethalFantasyCharacter } from "./character.mjs" +export { default as LethalFantasyOpponent } from "./opponent.mjs" +export { default as LethalFantasyWeapon } from "./weapon.mjs" +export { default as LethalFantasySpell } from "./spell.mjs" +export { default as LethalFantasySkill } from "./skill.mjs" +export { default as LethalFantasyArmor } from "./armor.mjs" +export { default as LethalFantasyShield } from "./shield.mjs" +export { default as LethalFantasyGift } from "./gift.mjs" +export { default as LethalFantasyVulnerability } from "./vulnerability.mjs" +export { default as LethalFantasySave } from "./save.mjs" +export { default as LethalFantasyEquipment } from "./equipment.mjs" +export { default as LethalFantasyMiracle } from "./miracle.mjs" diff --git a/.history/module/models/_module_20241210070825.mjs b/.history/module/models/_module_20241210070825.mjs new file mode 100644 index 0000000..fe0f8c3 --- /dev/null +++ b/.history/module/models/_module_20241210070825.mjs @@ -0,0 +1,12 @@ +export { default as LethalFantasyCharacter } from "./character.mjs" +export { default as LethalFantasyOpponent } from "./opponent.mjs" +export { default as LethalFantasyWeapon } from "./weapon.mjs" +export { default as LethalFantasySpell } from "./spell.mjs" +export { default as LethalFantasySkill } from "./skill.mjs" +export { default as LethalFantasyArmor } from "./armor.mjs" +export { default as LethalFantasyShield } from "./shield.mjs" +export { default as LethalFantasyGift } from "./gift.mjs" +export { default as LethalFantasyVulnerability } from "./vulnerability.mjs" +export { default as LethalFantasySave } from "./save.mjs" +export { default as LethalFantasyEquipment } from "./equipment.mjs" +export { default as LethalFantasyMiracle } from "./miracle.mjs" diff --git a/.history/module/models/_module_20241210071429.mjs b/.history/module/models/_module_20241210071429.mjs new file mode 100644 index 0000000..3b6c0c9 --- /dev/null +++ b/.history/module/models/_module_20241210071429.mjs @@ -0,0 +1,11 @@ +export { default as LethalFantasyCharacter } from "./character.mjs" +export { default as LethalFantasyOpponent } from "./opponent.mjs" +export { default as LethalFantasyWeapon } from "./weapon.mjs" +export { default as LethalFantasySpell } from "./spell.mjs" +export { default as LethalFantasySkill } from "./skill.mjs" +export { default as LethalFantasyArmor } from "./armor.mjs" +export { default as LethalFantasyShield } from "./shield.mjs" +export { default as LethalFantasyGift } from "./gift.mjs" +export { default as LethalFantasyVulnerability } from "./vulnerability.mjs" +export { default as LethalFantasyEquipment } from "./equipment.mjs" +export { default as LethalFantasyMiracle } from "./miracle.mjs" diff --git a/.history/module/models/armor_20241130182142.mjs b/.history/module/models/armor_20241130182142.mjs new file mode 100644 index 0000000..00445c4 --- /dev/null +++ b/.history/module/models/armor_20241130182142.mjs @@ -0,0 +1,29 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } +} diff --git a/.history/module/models/armor_20241210070624.mjs b/.history/module/models/armor_20241210070624.mjs new file mode 100644 index 0000000..f6260fd --- /dev/null +++ b/.history/module/models/armor_20241210070624.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + + diff --git a/.history/module/models/armor_20241210070625.mjs b/.history/module/models/armor_20241210070625.mjs new file mode 100644 index 0000000..f6260fd --- /dev/null +++ b/.history/module/models/armor_20241210070625.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + + diff --git a/.history/module/models/armor_20241210070627.mjs b/.history/module/models/armor_20241210070627.mjs new file mode 100644 index 0000000..f0022da --- /dev/null +++ b/.history/module/models/armor_20241210070627.mjs @@ -0,0 +1,25 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + diff --git a/.history/module/models/armor_20241210070631.mjs b/.history/module/models/armor_20241210070631.mjs new file mode 100644 index 0000000..00445c4 --- /dev/null +++ b/.history/module/models/armor_20241210070631.mjs @@ -0,0 +1,29 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } +} diff --git a/.history/module/models/armor_20241210070634.mjs b/.history/module/models/armor_20241210070634.mjs new file mode 100644 index 0000000..b0556f9 --- /dev/null +++ b/.history/module/models/armor_20241210070634.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210070636.mjs b/.history/module/models/armor_20241210070636.mjs new file mode 100644 index 0000000..9aec8fc --- /dev/null +++ b/.history/module/models/armor_20241210070636.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +}} diff --git a/.history/module/models/armor_20241210070637.mjs b/.history/module/models/armor_20241210070637.mjs new file mode 100644 index 0000000..b0556f9 --- /dev/null +++ b/.history/module/models/armor_20241210070637.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210070918.mjs b/.history/module/models/armor_20241210070918.mjs new file mode 100644 index 0000000..e2cac7c --- /dev/null +++ b/.history/module/models/armor_20241210070918.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximum = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210070920.mjs b/.history/module/models/armor_20241210070920.mjs new file mode 100644 index 0000000..9a1c1d9 --- /dev/null +++ b/.history/module/models/armor_20241210070920.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMove = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210070923.mjs b/.history/module/models/armor_20241210070923.mjs new file mode 100644 index 0000000..61157e3 --- /dev/null +++ b/.history/module/models/armor_20241210070923.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071003.mjs b/.history/module/models/armor_20241210071003.mjs new file mode 100644 index 0000000..d07dd91 --- /dev/null +++ b/.history/module/models/armor_20241210071003.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071028.mjs b/.history/module/models/armor_20241210071028.mjs new file mode 100644 index 0000000..523f629 --- /dev/null +++ b/.history/module/models/armor_20241210071028.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071210.mjs b/.history/module/models/armor_20241210071210.mjs new file mode 100644 index 0000000..3638e12 --- /dev/null +++ b/.history/module/models/armor_20241210071210.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.NumberField({ required: true, initial: "L" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071213.mjs b/.history/module/models/armor_20241210071213.mjs new file mode 100644 index 0000000..78af544 --- /dev/null +++ b/.history/module/models/armor_20241210071213.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.NumberField({ required: true, initial: "0" }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071217.mjs b/.history/module/models/armor_20241210071217.mjs new file mode 100644 index 0000000..4989957 --- /dev/null +++ b/.history/module/models/armor_20241210071217.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.NumberField({ required: true, initial: "0", min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071218.mjs b/.history/module/models/armor_20241210071218.mjs new file mode 100644 index 0000000..4989957 --- /dev/null +++ b/.history/module/models/armor_20241210071218.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.NumberField({ required: true, initial: "0", min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071602.mjs b/.history/module/models/armor_20241210071602.mjs new file mode 100644 index 0000000..940a9f1 --- /dev/null +++ b/.history/module/models/armor_20241210071602.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.loadEnc = new fields.NumberField({ required: true, initial: "0", min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071604.mjs b/.history/module/models/armor_20241210071604.mjs new file mode 100644 index 0000000..e08987c --- /dev/null +++ b/.history/module/models/armor_20241210071604.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: "0", min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210071830.mjs b/.history/module/models/armor_20241210071830.mjs new file mode 100644 index 0000000..3d1839d --- /dev/null +++ b/.history/module/models/armor_20241210071830.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172351.mjs b/.history/module/models/armor_20241210172351.mjs new file mode 100644 index 0000000..6575362 --- /dev/null +++ b/.history/module/models/armor_20241210172351.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172354.mjs b/.history/module/models/armor_20241210172354.mjs new file mode 100644 index 0000000..5e9144d --- /dev/null +++ b/.history/module/models/armor_20241210172354.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "", min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172355.mjs b/.history/module/models/armor_20241210172355.mjs new file mode 100644 index 0000000..d2c5967 --- /dev/null +++ b/.history/module/models/armor_20241210172355.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172356.mjs b/.history/module/models/armor_20241210172356.mjs new file mode 100644 index 0000000..d2c5967 --- /dev/null +++ b/.history/module/models/armor_20241210172356.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172411.mjs b/.history/module/models/armor_20241210172411.mjs new file mode 100644 index 0000000..d2c5967 --- /dev/null +++ b/.history/module/models/armor_20241210172411.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172415.mjs b/.history/module/models/armor_20241210172415.mjs new file mode 100644 index 0000000..93dfadf --- /dev/null +++ b/.history/module/models/armor_20241210172415.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172421.mjs b/.history/module/models/armor_20241210172421.mjs new file mode 100644 index 0000000..caed32a --- /dev/null +++ b/.history/module/models/armor_20241210172421.mjs @@ -0,0 +1,26 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172422.mjs b/.history/module/models/armor_20241210172422.mjs new file mode 100644 index 0000000..abb4e3d --- /dev/null +++ b/.history/module/models/armor_20241210172422.mjs @@ -0,0 +1,27 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172439.mjs b/.history/module/models/armor_20241210172439.mjs new file mode 100644 index 0000000..94d5714 --- /dev/null +++ b/.history/module/models/armor_20241210172439.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172441.mjs b/.history/module/models/armor_20241210172441.mjs new file mode 100644 index 0000000..1d43bec --- /dev/null +++ b/.history/module/models/armor_20241210172441.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.isShield = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172442.mjs b/.history/module/models/armor_20241210172442.mjs new file mode 100644 index 0000000..1d43bec --- /dev/null +++ b/.history/module/models/armor_20241210172442.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.isShield = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172443.mjs b/.history/module/models/armor_20241210172443.mjs new file mode 100644 index 0000000..1d43bec --- /dev/null +++ b/.history/module/models/armor_20241210172443.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.isShield = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172447.mjs b/.history/module/models/armor_20241210172447.mjs new file mode 100644 index 0000000..f69b74b --- /dev/null +++ b/.history/module/models/armor_20241210172447.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.isHelmet = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210172449.mjs b/.history/module/models/armor_20241210172449.mjs new file mode 100644 index 0000000..f69b74b --- /dev/null +++ b/.history/module/models/armor_20241210172449.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.isHelmet = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210173329.mjs b/.history/module/models/armor_20241210173329.mjs new file mode 100644 index 0000000..f69b74b --- /dev/null +++ b/.history/module/models/armor_20241210173329.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.isHelmet = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210173332.mjs b/.history/module/models/armor_20241210173332.mjs new file mode 100644 index 0000000..f69b74b --- /dev/null +++ b/.history/module/models/armor_20241210173332.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.isHelmet = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/armor_20241210173333.mjs b/.history/module/models/armor_20241210173333.mjs new file mode 100644 index 0000000..f69b74b --- /dev/null +++ b/.history/module/models/armor_20241210173333.mjs @@ -0,0 +1,28 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + schema.isHelmet = new fields.BooleanField({ required: true, initial: false }) + + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Armor"] + +} diff --git a/.history/module/models/character_20241130072212.mjs b/.history/module/models/character_20241130072212.mjs new file mode 100644 index 0000000..a48c577 --- /dev/null +++ b/.history/module/models/character_20241130072212.mjs @@ -0,0 +1,142 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208163852.mjs b/.history/module/models/character_20241208163852.mjs new file mode 100644 index 0000000..2e12b14 --- /dev/null +++ b/.history/module/models/character_20241208163852.mjs @@ -0,0 +1,146 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208163903.mjs b/.history/module/models/character_20241208163903.mjs new file mode 100644 index 0000000..8550343 --- /dev/null +++ b/.history/module/models/character_20241208163903.mjs @@ -0,0 +1,146 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.g = this.computeBase(); + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208163907.mjs b/.history/module/models/character_20241208163907.mjs new file mode 100644 index 0000000..e722a40 --- /dev/null +++ b/.history/module/models/character_20241208163907.mjs @@ -0,0 +1,146 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.value = this.computeBase(); + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208163950.mjs b/.history/module/models/character_20241208163950.mjs new file mode 100644 index 0000000..938432a --- /dev/null +++ b/.history/module/models/character_20241208163950.mjs @@ -0,0 +1,146 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.starting = this.computeBase(); + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208163954.mjs b/.history/module/models/character_20241208163954.mjs new file mode 100644 index 0000000..7139d87 --- /dev/null +++ b/.history/module/models/character_20241208163954.mjs @@ -0,0 +1,146 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.starting = + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164009.mjs b/.history/module/models/character_20241208164009.mjs new file mode 100644 index 0000000..e26f2f3 --- /dev/null +++ b/.history/module/models/character_20241208164009.mjs @@ -0,0 +1,147 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.starting = + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164014.mjs b/.history/module/models/character_20241208164014.mjs new file mode 100644 index 0000000..7db1032 --- /dev/null +++ b/.history/module/models/character_20241208164014.mjs @@ -0,0 +1,147 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.starting = + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164015.mjs b/.history/module/models/character_20241208164015.mjs new file mode 100644 index 0000000..7db1032 --- /dev/null +++ b/.history/module/models/character_20241208164015.mjs @@ -0,0 +1,147 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.starting = + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164017.mjs b/.history/module/models/character_20241208164017.mjs new file mode 100644 index 0000000..7db1032 --- /dev/null +++ b/.history/module/models/character_20241208164017.mjs @@ -0,0 +1,147 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.starting = + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164018.mjs b/.history/module/models/character_20241208164018.mjs new file mode 100644 index 0000000..7db1032 --- /dev/null +++ b/.history/module/models/character_20241208164018.mjs @@ -0,0 +1,147 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.starting = + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164021.mjs b/.history/module/models/character_20241208164021.mjs new file mode 100644 index 0000000..ee32df5 --- /dev/null +++ b/.history/module/models/character_20241208164021.mjs @@ -0,0 +1,147 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164036.mjs b/.history/module/models/character_20241208164036.mjs new file mode 100644 index 0000000..613633d --- /dev/null +++ b/.history/module/models/character_20241208164036.mjs @@ -0,0 +1,148 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164043.mjs b/.history/module/models/character_20241208164043.mjs new file mode 100644 index 0000000..f32ddb8 --- /dev/null +++ b/.history/module/models/character_20241208164043.mjs @@ -0,0 +1,149 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for () + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164048.mjs b/.history/module/models/character_20241208164048.mjs new file mode 100644 index 0000000..767ee7a --- /dev/null +++ b/.history/module/models/character_20241208164048.mjs @@ -0,0 +1,149 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let ) + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164054.mjs b/.history/module/models/character_20241208164054.mjs new file mode 100644 index 0000000..70ed310 --- /dev/null +++ b/.history/module/models/character_20241208164054.mjs @@ -0,0 +1,149 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in ) + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164055.mjs b/.history/module/models/character_20241208164055.mjs new file mode 100644 index 0000000..eb4ddda --- /dev/null +++ b/.history/module/models/character_20241208164055.mjs @@ -0,0 +1,149 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164101.mjs b/.history/module/models/character_20241208164101.mjs new file mode 100644 index 0000000..822faee --- /dev/null +++ b/.history/module/models/character_20241208164101.mjs @@ -0,0 +1,150 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (c) + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164153.mjs b/.history/module/models/character_20241208164153.mjs new file mode 100644 index 0000000..aa7b910 --- /dev/null +++ b/.history/module/models/character_20241208164153.mjs @@ -0,0 +1,150 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.) + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164154.mjs b/.history/module/models/character_20241208164154.mjs new file mode 100644 index 0000000..5ccb73b --- /dev/null +++ b/.history/module/models/character_20241208164154.mjs @@ -0,0 +1,150 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS) + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164223.mjs b/.history/module/models/character_20241208164223.mjs new file mode 100644 index 0000000..36b960e --- /dev/null +++ b/.history/module/models/character_20241208164223.mjs @@ -0,0 +1,150 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR) + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164226.mjs b/.history/module/models/character_20241208164226.mjs new file mode 100644 index 0000000..3c34711 --- /dev/null +++ b/.history/module/models/character_20241208164226.mjs @@ -0,0 +1,150 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164228.mjs b/.history/module/models/character_20241208164228.mjs new file mode 100644 index 0000000..d4eb3df --- /dev/null +++ b/.history/module/models/character_20241208164228.mjs @@ -0,0 +1,152 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164233.mjs b/.history/module/models/character_20241208164233.mjs new file mode 100644 index 0000000..bc41c83 --- /dev/null +++ b/.history/module/models/character_20241208164233.mjs @@ -0,0 +1,152 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += Math.max(0, this.characteristics[c].value - 3) + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164234.mjs b/.history/module/models/character_20241208164234.mjs new file mode 100644 index 0000000..d98f0a7 --- /dev/null +++ b/.history/module/models/character_20241208164234.mjs @@ -0,0 +1,152 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += Math.max(0, this.characteristics[c].value) + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164237.mjs b/.history/module/models/character_20241208164237.mjs new file mode 100644 index 0000000..f5b003f --- /dev/null +++ b/.history/module/models/character_20241208164237.mjs @@ -0,0 +1,152 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value) + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164238.mjs b/.history/module/models/character_20241208164238.mjs new file mode 100644 index 0000000..a183f00 --- /dev/null +++ b/.history/module/models/character_20241208164238.mjs @@ -0,0 +1,152 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164239.mjs b/.history/module/models/character_20241208164239.mjs new file mode 100644 index 0000000..a183f00 --- /dev/null +++ b/.history/module/models/character_20241208164239.mjs @@ -0,0 +1,152 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164240.mjs b/.history/module/models/character_20241208164240.mjs new file mode 100644 index 0000000..a183f00 --- /dev/null +++ b/.history/module/models/character_20241208164240.mjs @@ -0,0 +1,152 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164241.mjs b/.history/module/models/character_20241208164241.mjs new file mode 100644 index 0000000..a183f00 --- /dev/null +++ b/.history/module/models/character_20241208164241.mjs @@ -0,0 +1,152 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164246.mjs b/.history/module/models/character_20241208164246.mjs new file mode 100644 index 0000000..8c49786 --- /dev/null +++ b/.history/module/models/character_20241208164246.mjs @@ -0,0 +1,153 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = this. + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164252.mjs b/.history/module/models/character_20241208164252.mjs new file mode 100644 index 0000000..564f462 --- /dev/null +++ b/.history/module/models/character_20241208164252.mjs @@ -0,0 +1,153 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 2) + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164253.mjs b/.history/module/models/character_20241208164253.mjs new file mode 100644 index 0000000..564f462 --- /dev/null +++ b/.history/module/models/character_20241208164253.mjs @@ -0,0 +1,153 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 2) + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164256.mjs b/.history/module/models/character_20241208164256.mjs new file mode 100644 index 0000000..5c719bf --- /dev/null +++ b/.history/module/models/character_20241208164256.mjs @@ -0,0 +1,153 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164257.mjs b/.history/module/models/character_20241208164257.mjs new file mode 100644 index 0000000..5c719bf --- /dev/null +++ b/.history/module/models/character_20241208164257.mjs @@ -0,0 +1,153 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241208164300.mjs b/.history/module/models/character_20241208164300.mjs new file mode 100644 index 0000000..dfc9b71 --- /dev/null +++ b/.history/module/models/character_20241208164300.mjs @@ -0,0 +1,154 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Carac + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075636.mjs b/.history/module/models/character_20241210075636.mjs new file mode 100644 index 0000000..d518e01 --- /dev/null +++ b/.history/module/models/character_20241210075636.mjs @@ -0,0 +1,154 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075643.mjs b/.history/module/models/character_20241210075643.mjs new file mode 100644 index 0000000..1fab9e8 --- /dev/null +++ b/.history/module/models/character_20241210075643.mjs @@ -0,0 +1,162 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075647.mjs b/.history/module/models/character_20241210075647.mjs new file mode 100644 index 0000000..b168f45 --- /dev/null +++ b/.history/module/models/character_20241210075647.mjs @@ -0,0 +1,163 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075650.mjs b/.history/module/models/character_20241210075650.mjs new file mode 100644 index 0000000..d3be77f --- /dev/null +++ b/.history/module/models/character_20241210075650.mjs @@ -0,0 +1,163 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075651.mjs b/.history/module/models/character_20241210075651.mjs new file mode 100644 index 0000000..d3be77f --- /dev/null +++ b/.history/module/models/character_20241210075651.mjs @@ -0,0 +1,163 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075659.mjs b/.history/module/models/character_20241210075659.mjs new file mode 100644 index 0000000..9645e91 --- /dev/null +++ b/.history/module/models/character_20241210075659.mjs @@ -0,0 +1,169 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075704.mjs b/.history/module/models/character_20241210075704.mjs new file mode 100644 index 0000000..09fd3ef --- /dev/null +++ b/.history/module/models/character_20241210075704.mjs @@ -0,0 +1,169 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075708.mjs b/.history/module/models/character_20241210075708.mjs new file mode 100644 index 0000000..a0bf8d7 --- /dev/null +++ b/.history/module/models/character_20241210075708.mjs @@ -0,0 +1,169 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075711.mjs b/.history/module/models/character_20241210075711.mjs new file mode 100644 index 0000000..c9843aa --- /dev/null +++ b/.history/module/models/character_20241210075711.mjs @@ -0,0 +1,169 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075712.mjs b/.history/module/models/character_20241210075712.mjs new file mode 100644 index 0000000..c9843aa --- /dev/null +++ b/.history/module/models/character_20241210075712.mjs @@ -0,0 +1,169 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075716.mjs b/.history/module/models/character_20241210075716.mjs new file mode 100644 index 0000000..f41d6bb --- /dev/null +++ b/.history/module/models/character_20241210075716.mjs @@ -0,0 +1,169 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075717.mjs b/.history/module/models/character_20241210075717.mjs new file mode 100644 index 0000000..f41d6bb --- /dev/null +++ b/.history/module/models/character_20241210075717.mjs @@ -0,0 +1,169 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075811.mjs b/.history/module/models/character_20241210075811.mjs new file mode 100644 index 0000000..20a0004 --- /dev/null +++ b/.history/module/models/character_20241210075811.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075815.mjs b/.history/module/models/character_20241210075815.mjs new file mode 100644 index 0000000..cc45564 --- /dev/null +++ b/.history/module/models/character_20241210075815.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075816.mjs b/.history/module/models/character_20241210075816.mjs new file mode 100644 index 0000000..cc45564 --- /dev/null +++ b/.history/module/models/character_20241210075816.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075819.mjs b/.history/module/models/character_20241210075819.mjs new file mode 100644 index 0000000..d3e20f7 --- /dev/null +++ b/.history/module/models/character_20241210075819.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075821.mjs b/.history/module/models/character_20241210075821.mjs new file mode 100644 index 0000000..ce4f0ff --- /dev/null +++ b/.history/module/models/character_20241210075821.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075822.mjs b/.history/module/models/character_20241210075822.mjs new file mode 100644 index 0000000..ce4f0ff --- /dev/null +++ b/.history/module/models/character_20241210075822.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075823.mjs b/.history/module/models/character_20241210075823.mjs new file mode 100644 index 0000000..ce4f0ff --- /dev/null +++ b/.history/module/models/character_20241210075823.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075824.mjs b/.history/module/models/character_20241210075824.mjs new file mode 100644 index 0000000..8e70418 --- /dev/null +++ b/.history/module/models/character_20241210075824.mjs @@ -0,0 +1,174 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + schema.spellMiraclePoints = new fields.SchemaField({ + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075825.mjs b/.history/module/models/character_20241210075825.mjs new file mode 100644 index 0000000..a762213 --- /dev/null +++ b/.history/module/models/character_20241210075825.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075832.mjs b/.history/module/models/character_20241210075832.mjs new file mode 100644 index 0000000..7139c61 --- /dev/null +++ b/.history/module/models/character_20241210075832.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075837.mjs b/.history/module/models/character_20241210075837.mjs new file mode 100644 index 0000000..cc2abce --- /dev/null +++ b/.history/module/models/character_20241210075837.mjs @@ -0,0 +1,173 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075917.mjs b/.history/module/models/character_20241210075917.mjs new file mode 100644 index 0000000..d1700f9 --- /dev/null +++ b/.history/module/models/character_20241210075917.mjs @@ -0,0 +1,177 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075919.mjs b/.history/module/models/character_20241210075919.mjs new file mode 100644 index 0000000..f594d06 --- /dev/null +++ b/.history/module/models/character_20241210075919.mjs @@ -0,0 +1,177 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.money = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210075920.mjs b/.history/module/models/character_20241210075920.mjs new file mode 100644 index 0000000..f594d06 --- /dev/null +++ b/.history/module/models/character_20241210075920.mjs @@ -0,0 +1,177 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.money = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080003.mjs b/.history/module/models/character_20241210080003.mjs new file mode 100644 index 0000000..05a1914 --- /dev/null +++ b/.history/module/models/character_20241210080003.mjs @@ -0,0 +1,178 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + schema.money = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080005.mjs b/.history/module/models/character_20241210080005.mjs new file mode 100644 index 0000000..5f00833 --- /dev/null +++ b/.history/module/models/character_20241210080005.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080009.mjs b/.history/module/models/character_20241210080009.mjs new file mode 100644 index 0000000..9a0e52d --- /dev/null +++ b/.history/module/models/character_20241210080009.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const moneyField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080010.mjs b/.history/module/models/character_20241210080010.mjs new file mode 100644 index 0000000..9a0e52d --- /dev/null +++ b/.history/module/models/character_20241210080010.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const moneyField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080011.mjs b/.history/module/models/character_20241210080011.mjs new file mode 100644 index 0000000..9a0e52d --- /dev/null +++ b/.history/module/models/character_20241210080011.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const moneyField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080012.mjs b/.history/module/models/character_20241210080012.mjs new file mode 100644 index 0000000..9a0e52d --- /dev/null +++ b/.history/module/models/character_20241210080012.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const moneyField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080017.mjs b/.history/module/models/character_20241210080017.mjs new file mode 100644 index 0000000..aaa4c6b --- /dev/null +++ b/.history/module/models/character_20241210080017.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const moneyField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.mone = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080018.mjs b/.history/module/models/character_20241210080018.mjs new file mode 100644 index 0000000..bd4c28b --- /dev/null +++ b/.history/module/models/character_20241210080018.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const moneyField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.moneys = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080036.mjs b/.history/module/models/character_20241210080036.mjs new file mode 100644 index 0000000..ef594fc --- /dev/null +++ b/.history/module/models/character_20241210080036.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const moneyField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.moneys = new fields.SchemaField( + Object.values(SYSTEM.MONEY).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/character_20241210080039.mjs b/.history/module/models/character_20241210080039.mjs new file mode 100644 index 0000000..c6bdb80 --- /dev/null +++ b/.history/module/models/character_20241210080039.mjs @@ -0,0 +1,186 @@ +import { ROLL_TYPE, SYSTEM } from "../config/system.mjs" +import LethalFantasyRoll from "../documents/roll.mjs" +import LethalFantasyUtils from "../utils.mjs" + +export default class LethalFantasyCharacter extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.notes = new fields.HTMLField({ required: true, textSearch: true }) + + // Carac + const characteristicField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }), + percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }), + attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }), + defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + + schema.characteristics = new fields.SchemaField( + Object.values(SYSTEM.CHARACTERISTICS).reduce((obj, characteristic) => { + obj[characteristic.id] = characteristicField(characteristic.label) + return obj + }, {}), + ) + + // Save + const saveField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.saves = new fields.SchemaField( + Object.values(SYSTEM.SAVES).reduce((obj, save) => { + obj[save.id] = saveField(save.label) + return obj + }, {}), + ) + + // Challenges + const challengeField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.challenges = new fields.SchemaField( + Object.values(SYSTEM.CHALLENGES).reduce((obj, save) => { + obj[save.id] = challengeField(save.label) + return obj + }, {}), + ) + + schema.hp = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + + schema.perception = new fields.SchemaField({ + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.luck = new fields.SchemaField({ + earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.movement = new fields.SchemaField({ + walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + }) + schema.biodata = new fields.SchemaField({ + class: new fields.StringField({ required: true, nullable: false, initial: "" }), + level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), + mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), + alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), + age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), + height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), + eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), + hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + }) + schema.developmentPoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + schema.spellMiraclePoints = new fields.SchemaField({ + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + used: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + }) + + const moneyField = (label) => { + const schema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + } + return new fields.SchemaField(schema, { label }) + } + schema.moneys = new fields.SchemaField( + Object.values(SYSTEM.MONEY).reduce((obj, save) => { + obj[save.id] = moneyField(save.label) + return obj + }, {}), + ) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async roll(rollType, rollTarget, rollAdvantage = "=") { + let rollValue + let opponentTarget + switch (rollType) { + case ROLL_TYPE.SAVE: + rollValue = this.caracteristiques[rollTarget].valeur + opponentTarget = game.user.targets.first() + break + case ROLL_TYPE.DAMAGE: + rollValue = this.parent.items.get(rollTarget).system.degats + opponentTarget = game.user.targets.first() + break + default: + // Handle other cases or do nothing + break + } + await this._roll(rollType, rollTarget, rollValue, opponentTarget, rollAdvantage) + } + + /** + * Rolls a dice for a character. + * @param {("save"|"resource|damage")} rollType The type of the roll. + * @param {number} rollTarget The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. + * @param {number} rollValue The value of the roll. If the roll is a damage roll, this is the dice to roll. + * @param {Token} opponentTarget The target of the roll : used for save rolls to get the oppponent's malus. + * @param {"="|"+"|"++"|"-"|"--"} rollAdvantage If there is an avantage (+), a disadvantage (-), a double advantage (++), a double disadvantage (--) or a normal roll (=). + * @returns {Promise} - A promise that resolves to null if the roll is cancelled. + */ + async _roll(rollType, rollTarget, rollValue, opponentTarget = undefined, rollAdvantage = "=") { + const hasTarget = opponentTarget !== undefined + let roll = await LethalFantasyRoll.prompt({ + rollType, + rollTarget, + rollValue, + actorId: this.parent.id, + actorName: this.parent.name, + actorImage: this.parent.img, + hasTarget, + target: opponentTarget, + rollAdvantage, + }) + if (!roll) return null + + await roll.toMessage({}, { rollMode: roll.options.rollMode }) + } +} diff --git a/.history/module/models/equipment_20241207222905.mjs b/.history/module/models/equipment_20241207222905.mjs new file mode 100644 index 0000000..c68dd3c --- /dev/null +++ b/.history/module/models/equipment_20241207222905.mjs @@ -0,0 +1,25 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasyEquipment extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.EQUIPMENT_CATEGORIES }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.hi = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.medium = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.lo = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Equipment"] + +} diff --git a/.history/module/models/equipment_20241210071226.mjs b/.history/module/models/equipment_20241210071226.mjs new file mode 100644 index 0000000..f219296 --- /dev/null +++ b/.history/module/models/equipment_20241210071226.mjs @@ -0,0 +1,25 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasyEquipment extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.EQUIPMENT_CATEGORIES }) + + schema.load = new fields.NumberField({ required: true, initial: "0", min: 0 }) + schema.hi = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.medium = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.lo = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Equipment"] + +} diff --git a/.history/module/models/equipment_20241210071610.mjs b/.history/module/models/equipment_20241210071610.mjs new file mode 100644 index 0000000..406125d --- /dev/null +++ b/.history/module/models/equipment_20241210071610.mjs @@ -0,0 +1,25 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasyEquipment extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.EQUIPMENT_CATEGORIES }) + + schema.encLoad = new fields.NumberField({ required: true, initial: "0", min: 0 }) + schema.hi = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.medium = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.lo = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Equipment"] + +} diff --git a/.history/module/models/equipment_20241210071839.mjs b/.history/module/models/equipment_20241210071839.mjs new file mode 100644 index 0000000..eea5455 --- /dev/null +++ b/.history/module/models/equipment_20241210071839.mjs @@ -0,0 +1,25 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasyEquipment extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.EQUIPMENT_CATEGORIES }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.hi = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.medium = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.lo = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Equipment"] + +} diff --git a/.history/module/models/miracle_20241209150718.mjs b/.history/module/models/miracle_20241209150718.mjs new file mode 100644 index 0000000..e69de29 diff --git a/.history/module/models/miracle_20241209150719.mjs b/.history/module/models/miracle_20241209150719.mjs new file mode 100644 index 0000000..3cdde8e --- /dev/null +++ b/.history/module/models/miracle_20241209150719.mjs @@ -0,0 +1,39 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasySpell extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + }) + schema.castingTime = new fields.StringField({ required: true, initial: "" }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150908.mjs b/.history/module/models/miracle_20241209150908.mjs new file mode 100644 index 0000000..771437b --- /dev/null +++ b/.history/module/models/miracle_20241209150908.mjs @@ -0,0 +1,39 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + }) + schema.castingTime = new fields.StringField({ required: true, initial: "" }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150921.mjs b/.history/module/models/miracle_20241209150921.mjs new file mode 100644 index 0000000..a772878 --- /dev/null +++ b/.history/module/models/miracle_20241209150921.mjs @@ -0,0 +1,39 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150924.mjs b/.history/module/models/miracle_20241209150924.mjs new file mode 100644 index 0000000..19c7e57 --- /dev/null +++ b/.history/module/models/miracle_20241209150924.mjs @@ -0,0 +1,39 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150927.mjs b/.history/module/models/miracle_20241209150927.mjs new file mode 100644 index 0000000..62dab77 --- /dev/null +++ b/.history/module/models/miracle_20241209150927.mjs @@ -0,0 +1,39 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150944.mjs b/.history/module/models/miracle_20241209150944.mjs new file mode 100644 index 0000000..9886675 --- /dev/null +++ b/.history/module/models/miracle_20241209150944.mjs @@ -0,0 +1,40 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + material: new fields.BooleanField(), + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150946.mjs b/.history/module/models/miracle_20241209150946.mjs new file mode 100644 index 0000000..f01c556 --- /dev/null +++ b/.history/module/models/miracle_20241209150946.mjs @@ -0,0 +1,40 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + cataluyst: new fields.BooleanField(), + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150948.mjs b/.history/module/models/miracle_20241209150948.mjs new file mode 100644 index 0000000..1a7d956 --- /dev/null +++ b/.history/module/models/miracle_20241209150948.mjs @@ -0,0 +1,40 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150951.mjs b/.history/module/models/miracle_20241209150951.mjs new file mode 100644 index 0000000..77e8f55 --- /dev/null +++ b/.history/module/models/miracle_20241209150951.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + catalyst: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150956.mjs b/.history/module/models/miracle_20241209150956.mjs new file mode 100644 index 0000000..5c0dba6 --- /dev/null +++ b/.history/module/models/miracle_20241209150956.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209150957.mjs b/.history/module/models/miracle_20241209150957.mjs new file mode 100644 index 0000000..5c0dba6 --- /dev/null +++ b/.history/module/models/miracle_20241209150957.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151003.mjs b/.history/module/models/miracle_20241209151003.mjs new file mode 100644 index 0000000..fa9705d --- /dev/null +++ b/.history/module/models/miracle_20241209151003.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151005.mjs b/.history/module/models/miracle_20241209151005.mjs new file mode 100644 index 0000000..828872b --- /dev/null +++ b/.history/module/models/miracle_20241209151005.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151010.mjs b/.history/module/models/miracle_20241209151010.mjs new file mode 100644 index 0000000..31ea44f --- /dev/null +++ b/.history/module/models/miracle_20241209151010.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151013.mjs b/.history/module/models/miracle_20241209151013.mjs new file mode 100644 index 0000000..ef2d2e3 --- /dev/null +++ b/.history/module/models/miracle_20241209151013.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151020.mjs b/.history/module/models/miracle_20241209151020.mjs new file mode 100644 index 0000000..66a303d --- /dev/null +++ b/.history/module/models/miracle_20241209151020.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151035.mjs b/.history/module/models/miracle_20241209151035.mjs new file mode 100644 index 0000000..66a303d --- /dev/null +++ b/.history/module/models/miracle_20241209151035.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151037.mjs b/.history/module/models/miracle_20241209151037.mjs new file mode 100644 index 0000000..402b6c4 --- /dev/null +++ b/.history/module/models/miracle_20241209151037.mjs @@ -0,0 +1,40 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151038.mjs b/.history/module/models/miracle_20241209151038.mjs new file mode 100644 index 0000000..402b6c4 --- /dev/null +++ b/.history/module/models/miracle_20241209151038.mjs @@ -0,0 +1,40 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151039.mjs b/.history/module/models/miracle_20241209151039.mjs new file mode 100644 index 0000000..2aa9884 --- /dev/null +++ b/.history/module/models/miracle_20241209151039.mjs @@ -0,0 +1,38 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151040.mjs b/.history/module/models/miracle_20241209151040.mjs new file mode 100644 index 0000000..2aa9884 --- /dev/null +++ b/.history/module/models/miracle_20241209151040.mjs @@ -0,0 +1,38 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"] +} diff --git a/.history/module/models/miracle_20241209151053.mjs b/.history/module/models/miracle_20241209151053.mjs new file mode 100644 index 0000000..48628f4 --- /dev/null +++ b/.history/module/models/miracle_20241209151053.mjs @@ -0,0 +1,38 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Miracle"] +} diff --git a/.history/module/models/miracle_20241209151055.mjs b/.history/module/models/miracle_20241209151055.mjs new file mode 100644 index 0000000..48628f4 --- /dev/null +++ b/.history/module/models/miracle_20241209151055.mjs @@ -0,0 +1,38 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Miracle"] +} diff --git a/.history/module/models/shield_20241130182151.mjs b/.history/module/models/shield_20241130182151.mjs new file mode 100644 index 0000000..c6f68bb --- /dev/null +++ b/.history/module/models/shield_20241130182151.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyShield extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.standing = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.crouching = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.destruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.autodestruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Shield"] + +} diff --git a/.history/module/models/shield_20241210071245.mjs b/.history/module/models/shield_20241210071245.mjs new file mode 100644 index 0000000..94401c9 --- /dev/null +++ b/.history/module/models/shield_20241210071245.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyShield extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.standing = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.crouching = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.destruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.autodestruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.NumberField({ required: true, initial: "0", min: 0 }) + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Shield"] + +} diff --git a/.history/module/models/shield_20241210071615.mjs b/.history/module/models/shield_20241210071615.mjs new file mode 100644 index 0000000..02c4a76 --- /dev/null +++ b/.history/module/models/shield_20241210071615.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyShield extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.standing = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.crouching = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.destruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.autodestruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: "0", min: 0 }) + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Shield"] + +} diff --git a/.history/module/models/shield_20241210071844.mjs b/.history/module/models/shield_20241210071844.mjs new file mode 100644 index 0000000..e0a0cee --- /dev/null +++ b/.history/module/models/shield_20241210071844.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyShield extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.standing = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.crouching = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.destruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.autodestruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Shield"] + +} diff --git a/.history/module/models/shield_20241210172434.mjs b/.history/module/models/shield_20241210172434.mjs new file mode 100644 index 0000000..8ed321e --- /dev/null +++ b/.history/module/models/shield_20241210172434.mjs @@ -0,0 +1,42 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyShield extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.standing = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.crouching = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.destruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.autodestruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Shield"] + +} diff --git a/.history/module/models/skill_20241207090310.mjs b/.history/module/models/skill_20241207090310.mjs new file mode 100644 index 0000000..f05e302 --- /dev/null +++ b/.history/module/models/skill_20241207090310.mjs @@ -0,0 +1,67 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208155713.mjs b/.history/module/models/skill_20241208155713.mjs new file mode 100644 index 0000000..f1eac94 --- /dev/null +++ b/.history/module/models/skill_20241208155713.mjs @@ -0,0 +1,68 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weapo + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208155715.mjs b/.history/module/models/skill_20241208155715.mjs new file mode 100644 index 0000000..f374a22 --- /dev/null +++ b/.history/module/models/skill_20241208155715.mjs @@ -0,0 +1,68 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208155716.mjs b/.history/module/models/skill_20241208155716.mjs new file mode 100644 index 0000000..5da806c --- /dev/null +++ b/.history/module/models/skill_20241208155716.mjs @@ -0,0 +1,68 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "simple", choices: SYSTEM.WEAPON_CLASS }) + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208155717.mjs b/.history/module/models/skill_20241208155717.mjs new file mode 100644 index 0000000..72ad300 --- /dev/null +++ b/.history/module/models/skill_20241208155717.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "simple", choices: SYSTEM.WEAPON_CLASS }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208155726.mjs b/.history/module/models/skill_20241208155726.mjs new file mode 100644 index 0000000..f0ea5f9 --- /dev/null +++ b/.history/module/models/skill_20241208155726.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208155727.mjs b/.history/module/models/skill_20241208155727.mjs new file mode 100644 index 0000000..f0ea5f9 --- /dev/null +++ b/.history/module/models/skill_20241208155727.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208155728.mjs b/.history/module/models/skill_20241208155728.mjs new file mode 100644 index 0000000..f0ea5f9 --- /dev/null +++ b/.history/module/models/skill_20241208155728.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171006.mjs b/.history/module/models/skill_20241208171006.mjs new file mode 100644 index 0000000..098e9e8 --- /dev/null +++ b/.history/module/models/skill_20241208171006.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + s + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171010.mjs b/.history/module/models/skill_20241208171010.mjs new file mode 100644 index 0000000..3d5c7c6 --- /dev/null +++ b/.history/module/models/skill_20241208171010.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.bonus + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171013.mjs b/.history/module/models/skill_20241208171013.mjs new file mode 100644 index 0000000..7a89048 --- /dev/null +++ b/.history/module/models/skill_20241208171013.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.bonus + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171015.mjs b/.history/module/models/skill_20241208171015.mjs new file mode 100644 index 0000000..54e9be2 --- /dev/null +++ b/.history/module/models/skill_20241208171015.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.bon + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171017.mjs b/.history/module/models/skill_20241208171017.mjs new file mode 100644 index 0000000..6726bc9 --- /dev/null +++ b/.history/module/models/skill_20241208171017.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema. + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171022.mjs b/.history/module/models/skill_20241208171022.mjs new file mode 100644 index 0000000..6bd52de --- /dev/null +++ b/.history/module/models/skill_20241208171022.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171023.mjs b/.history/module/models/skill_20241208171023.mjs new file mode 100644 index 0000000..9df1bf9 --- /dev/null +++ b/.history/module/models/skill_20241208171023.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171031.mjs b/.history/module/models/skill_20241208171031.mjs new file mode 100644 index 0000000..f108139 --- /dev/null +++ b/.history/module/models/skill_20241208171031.mjs @@ -0,0 +1,70 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = + new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171033.mjs b/.history/module/models/skill_20241208171033.mjs new file mode 100644 index 0000000..6bd52de --- /dev/null +++ b/.history/module/models/skill_20241208171033.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171035.mjs b/.history/module/models/skill_20241208171035.mjs new file mode 100644 index 0000000..5c54d84 --- /dev/null +++ b/.history/module/models/skill_20241208171035.mjs @@ -0,0 +1,68 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171038.mjs b/.history/module/models/skill_20241208171038.mjs new file mode 100644 index 0000000..f0ea5f9 --- /dev/null +++ b/.history/module/models/skill_20241208171038.mjs @@ -0,0 +1,69 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171051.mjs b/.history/module/models/skill_20241208171051.mjs new file mode 100644 index 0000000..5a9ab85 --- /dev/null +++ b/.history/module/models/skill_20241208171051.mjs @@ -0,0 +1,73 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171055.mjs b/.history/module/models/skill_20241208171055.mjs new file mode 100644 index 0000000..901cc70 --- /dev/null +++ b/.history/module/models/skill_20241208171055.mjs @@ -0,0 +1,73 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171059.mjs b/.history/module/models/skill_20241208171059.mjs new file mode 100644 index 0000000..447a2a6 --- /dev/null +++ b/.history/module/models/skill_20241208171059.mjs @@ -0,0 +1,73 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171102.mjs b/.history/module/models/skill_20241208171102.mjs new file mode 100644 index 0000000..3d8fbba --- /dev/null +++ b/.history/module/models/skill_20241208171102.mjs @@ -0,0 +1,73 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171105.mjs b/.history/module/models/skill_20241208171105.mjs new file mode 100644 index 0000000..fc69f80 --- /dev/null +++ b/.history/module/models/skill_20241208171105.mjs @@ -0,0 +1,73 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171106.mjs b/.history/module/models/skill_20241208171106.mjs new file mode 100644 index 0000000..794c45f --- /dev/null +++ b/.history/module/models/skill_20241208171106.mjs @@ -0,0 +1,73 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + } + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171107.mjs b/.history/module/models/skill_20241208171107.mjs new file mode 100644 index 0000000..410dac0 --- /dev/null +++ b/.history/module/models/skill_20241208171107.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + } + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171108.mjs b/.history/module/models/skill_20241208171108.mjs new file mode 100644 index 0000000..410dac0 --- /dev/null +++ b/.history/module/models/skill_20241208171108.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + } + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171110.mjs b/.history/module/models/skill_20241208171110.mjs new file mode 100644 index 0000000..410dac0 --- /dev/null +++ b/.history/module/models/skill_20241208171110.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + } + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171115.mjs b/.history/module/models/skill_20241208171115.mjs new file mode 100644 index 0000000..bb2efa2 --- /dev/null +++ b/.history/module/models/skill_20241208171115.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + } + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171116.mjs b/.history/module/models/skill_20241208171116.mjs new file mode 100644 index 0000000..bb2efa2 --- /dev/null +++ b/.history/module/models/skill_20241208171116.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + } + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171117.mjs b/.history/module/models/skill_20241208171117.mjs new file mode 100644 index 0000000..8d5ad85 --- /dev/null +++ b/.history/module/models/skill_20241208171117.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171118.mjs b/.history/module/models/skill_20241208171118.mjs new file mode 100644 index 0000000..8d5ad85 --- /dev/null +++ b/.history/module/models/skill_20241208171118.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171121.mjs b/.history/module/models/skill_20241208171121.mjs new file mode 100644 index 0000000..8d5ad85 --- /dev/null +++ b/.history/module/models/skill_20241208171121.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208171122.mjs b/.history/module/models/skill_20241208171122.mjs new file mode 100644 index 0000000..8d5ad85 --- /dev/null +++ b/.history/module/models/skill_20241208171122.mjs @@ -0,0 +1,74 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201835.mjs b/.history/module/models/skill_20241208201835.mjs new file mode 100644 index 0000000..4de1b49 --- /dev/null +++ b/.history/module/models/skill_20241208201835.mjs @@ -0,0 +1,75 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + this. + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201841.mjs b/.history/module/models/skill_20241208201841.mjs new file mode 100644 index 0000000..a238062 --- /dev/null +++ b/.history/module/models/skill_20241208201841.mjs @@ -0,0 +1,75 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + this.totalBonus = this.bonus + this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201844.mjs b/.history/module/models/skill_20241208201844.mjs new file mode 100644 index 0000000..4a240df --- /dev/null +++ b/.history/module/models/skill_20241208201844.mjs @@ -0,0 +1,75 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201845.mjs b/.history/module/models/skill_20241208201845.mjs new file mode 100644 index 0000000..4a240df --- /dev/null +++ b/.history/module/models/skill_20241208201845.mjs @@ -0,0 +1,75 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201847.mjs b/.history/module/models/skill_20241208201847.mjs new file mode 100644 index 0000000..4a240df --- /dev/null +++ b/.history/module/models/skill_20241208201847.mjs @@ -0,0 +1,75 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201848.mjs b/.history/module/models/skill_20241208201848.mjs new file mode 100644 index 0000000..4a240df --- /dev/null +++ b/.history/module/models/skill_20241208201848.mjs @@ -0,0 +1,75 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201853.mjs b/.history/module/models/skill_20241208201853.mjs new file mode 100644 index 0000000..11787a9 --- /dev/null +++ b/.history/module/models/skill_20241208201853.mjs @@ -0,0 +1,76 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.) + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201856.mjs b/.history/module/models/skill_20241208201856.mjs new file mode 100644 index 0000000..9501ffc --- /dev/null +++ b/.history/module/models/skill_20241208201856.mjs @@ -0,0 +1,76 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.weaponType) + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201859.mjs b/.history/module/models/skill_20241208201859.mjs new file mode 100644 index 0000000..44591f7 --- /dev/null +++ b/.history/module/models/skill_20241208201859.mjs @@ -0,0 +1,76 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.skill) + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201912.mjs b/.history/module/models/skill_20241208201912.mjs new file mode 100644 index 0000000..3f23922 --- /dev/null +++ b/.history/module/models/skill_20241208201912.mjs @@ -0,0 +1,76 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "combat" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201914.mjs b/.history/module/models/skill_20241208201914.mjs new file mode 100644 index 0000000..9f51d0d --- /dev/null +++ b/.history/module/models/skill_20241208201914.mjs @@ -0,0 +1,76 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201916.mjs b/.history/module/models/skill_20241208201916.mjs new file mode 100644 index 0000000..9f51d0d --- /dev/null +++ b/.history/module/models/skill_20241208201916.mjs @@ -0,0 +1,76 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201917.mjs b/.history/module/models/skill_20241208201917.mjs new file mode 100644 index 0000000..2188c98 --- /dev/null +++ b/.history/module/models/skill_20241208201917.mjs @@ -0,0 +1,76 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201919.mjs b/.history/module/models/skill_20241208201919.mjs new file mode 100644 index 0000000..bc616f6 --- /dev/null +++ b/.history/module/models/skill_20241208201919.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201929.mjs b/.history/module/models/skill_20241208201929.mjs new file mode 100644 index 0000000..dfb2726 --- /dev/null +++ b/.history/module/models/skill_20241208201929.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201933.mjs b/.history/module/models/skill_20241208201933.mjs new file mode 100644 index 0000000..2828de0 --- /dev/null +++ b/.history/module/models/skill_20241208201933.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = this. + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201950.mjs b/.history/module/models/skill_20241208201950.mjs new file mode 100644 index 0000000..51995ae --- /dev/null +++ b/.history/module/models/skill_20241208201950.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = this.skillTotal + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201953.mjs b/.history/module/models/skill_20241208201953.mjs new file mode 100644 index 0000000..e044271 --- /dev/null +++ b/.history/module/models/skill_20241208201953.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = this.skillTotal / 10 + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208201959.mjs b/.history/module/models/skill_20241208201959.mjs new file mode 100644 index 0000000..d774793 --- /dev/null +++ b/.history/module/models/skill_20241208201959.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = Math.floor(this.skillTotal / 10 + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202001.mjs b/.history/module/models/skill_20241208202001.mjs new file mode 100644 index 0000000..f97f9fe --- /dev/null +++ b/.history/module/models/skill_20241208202001.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = Math.floor(this.skillTotal / 10) - 1 + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202002.mjs b/.history/module/models/skill_20241208202002.mjs new file mode 100644 index 0000000..f97f9fe --- /dev/null +++ b/.history/module/models/skill_20241208202002.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = Math.floor(this.skillTotal / 10) - 1 + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202009.mjs b/.history/module/models/skill_20241208202009.mjs new file mode 100644 index 0000000..1ad204f --- /dev/null +++ b/.history/module/models/skill_20241208202009.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1 + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202010.mjs b/.history/module/models/skill_20241208202010.mjs new file mode 100644 index 0000000..7ed6a17 --- /dev/null +++ b/.history/module/models/skill_20241208202010.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1 ) + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202011.mjs b/.history/module/models/skill_20241208202011.mjs new file mode 100644 index 0000000..7ed6a17 --- /dev/null +++ b/.history/module/models/skill_20241208202011.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1 ) + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202013.mjs b/.history/module/models/skill_20241208202013.mjs new file mode 100644 index 0000000..61ac9f3 --- /dev/null +++ b/.history/module/models/skill_20241208202013.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202014.mjs b/.history/module/models/skill_20241208202014.mjs new file mode 100644 index 0000000..61ac9f3 --- /dev/null +++ b/.history/module/models/skill_20241208202014.mjs @@ -0,0 +1,77 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202017.mjs b/.history/module/models/skill_20241208202017.mjs new file mode 100644 index 0000000..4b5fe72 --- /dev/null +++ b/.history/module/models/skill_20241208202017.mjs @@ -0,0 +1,78 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208202018.mjs b/.history/module/models/skill_20241208202018.mjs new file mode 100644 index 0000000..4b5fe72 --- /dev/null +++ b/.history/module/models/skill_20241208202018.mjs @@ -0,0 +1,78 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204413.mjs b/.history/module/models/skill_20241208204413.mjs new file mode 100644 index 0000000..09cf869 --- /dev/null +++ b/.history/module/models/skill_20241208204413.mjs @@ -0,0 +1,79 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204416.mjs b/.history/module/models/skill_20241208204416.mjs new file mode 100644 index 0000000..9d5bbbe --- /dev/null +++ b/.history/module/models/skill_20241208204416.mjs @@ -0,0 +1,79 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204422.mjs b/.history/module/models/skill_20241208204422.mjs new file mode 100644 index 0000000..e6bc2b1 --- /dev/null +++ b/.history/module/models/skill_20241208204422.mjs @@ -0,0 +1,82 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204426.mjs b/.history/module/models/skill_20241208204426.mjs new file mode 100644 index 0000000..9e488ba --- /dev/null +++ b/.history/module/models/skill_20241208204426.mjs @@ -0,0 +1,82 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204428.mjs b/.history/module/models/skill_20241208204428.mjs new file mode 100644 index 0000000..2296d8b --- /dev/null +++ b/.history/module/models/skill_20241208204428.mjs @@ -0,0 +1,82 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204429.mjs b/.history/module/models/skill_20241208204429.mjs new file mode 100644 index 0000000..2296d8b --- /dev/null +++ b/.history/module/models/skill_20241208204429.mjs @@ -0,0 +1,82 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = MathM.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204530.mjs b/.history/module/models/skill_20241208204530.mjs new file mode 100644 index 0000000..3510d66 --- /dev/null +++ b/.history/module/models/skill_20241208204530.mjs @@ -0,0 +1,82 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204648.mjs b/.history/module/models/skill_20241208204648.mjs new file mode 100644 index 0000000..5302503 --- /dev/null +++ b/.history/module/models/skill_20241208204648.mjs @@ -0,0 +1,84 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + update(data, options) { + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204651.mjs b/.history/module/models/skill_20241208204651.mjs new file mode 100644 index 0000000..84f212f --- /dev/null +++ b/.history/module/models/skill_20241208204651.mjs @@ -0,0 +1,86 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + update(data, options) { + super.update(data, options); + this.prepareDerivedData(); + } + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204652.mjs b/.history/module/models/skill_20241208204652.mjs new file mode 100644 index 0000000..6293fdc --- /dev/null +++ b/.history/module/models/skill_20241208204652.mjs @@ -0,0 +1,87 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + update(data, options) { + super.update(data, options); + this.prepareDerivedData(); + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204659.mjs b/.history/module/models/skill_20241208204659.mjs new file mode 100644 index 0000000..2cf86f9 --- /dev/null +++ b/.history/module/models/skill_20241208204659.mjs @@ -0,0 +1,88 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + update(data, options) { + super.update(data, options); + console.log("Skill update", this); + this.prepareDerivedData(); + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204754.mjs b/.history/module/models/skill_20241208204754.mjs new file mode 100644 index 0000000..3510d66 --- /dev/null +++ b/.history/module/models/skill_20241208204754.mjs @@ -0,0 +1,82 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204926.mjs b/.history/module/models/skill_20241208204926.mjs new file mode 100644 index 0000000..0cd6a23 --- /dev/null +++ b/.history/module/models/skill_20241208204926.mjs @@ -0,0 +1,84 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate() + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204929.mjs b/.history/module/models/skill_20241208204929.mjs new file mode 100644 index 0000000..dfb782a --- /dev/null +++ b/.history/module/models/skill_20241208204929.mjs @@ -0,0 +1,84 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204931.mjs b/.history/module/models/skill_20241208204931.mjs new file mode 100644 index 0000000..66e7be1 --- /dev/null +++ b/.history/module/models/skill_20241208204931.mjs @@ -0,0 +1,86 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204936.mjs b/.history/module/models/skill_20241208204936.mjs new file mode 100644 index 0000000..b1bdf78 --- /dev/null +++ b/.history/module/models/skill_20241208204936.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const errors = super.validate(options) + if (this.category === "weapon") { + if (this.weaponClass === "unarmed") { + if (this.weaponBonus.attack || this.weaponBonus.defense || this.weaponBonus.damage) { + errors.push("LETHALFANTASY.Errors.UnarmedWeaponBonus") + } + } + } + return errors + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204937.mjs b/.history/module/models/skill_20241208204937.mjs new file mode 100644 index 0000000..b1bdf78 --- /dev/null +++ b/.history/module/models/skill_20241208204937.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const errors = super.validate(options) + if (this.category === "weapon") { + if (this.weaponClass === "unarmed") { + if (this.weaponBonus.attack || this.weaponBonus.defense || this.weaponBonus.damage) { + errors.push("LETHALFANTASY.Errors.UnarmedWeaponBonus") + } + } + } + return errors + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204940.mjs b/.history/module/models/skill_20241208204940.mjs new file mode 100644 index 0000000..451c89c --- /dev/null +++ b/.history/module/models/skill_20241208204940.mjs @@ -0,0 +1,87 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const errors = super.validate(options) + return errors + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204941.mjs b/.history/module/models/skill_20241208204941.mjs new file mode 100644 index 0000000..451c89c --- /dev/null +++ b/.history/module/models/skill_20241208204941.mjs @@ -0,0 +1,87 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const errors = super.validate(options) + return errors + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204944.mjs b/.history/module/models/skill_20241208204944.mjs new file mode 100644 index 0000000..98cc5ab --- /dev/null +++ b/.history/module/models/skill_20241208204944.mjs @@ -0,0 +1,87 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const error = super.validate(options) + return errors + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204948.mjs b/.history/module/models/skill_20241208204948.mjs new file mode 100644 index 0000000..a101235 --- /dev/null +++ b/.history/module/models/skill_20241208204948.mjs @@ -0,0 +1,87 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + return errors + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204949.mjs b/.history/module/models/skill_20241208204949.mjs new file mode 100644 index 0000000..f3c6203 --- /dev/null +++ b/.history/module/models/skill_20241208204949.mjs @@ -0,0 +1,87 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204950.mjs b/.history/module/models/skill_20241208204950.mjs new file mode 100644 index 0000000..f3c6203 --- /dev/null +++ b/.history/module/models/skill_20241208204950.mjs @@ -0,0 +1,87 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204956.mjs b/.history/module/models/skill_20241208204956.mjs new file mode 100644 index 0000000..0619be8 --- /dev/null +++ b/.history/module/models/skill_20241208204956.mjs @@ -0,0 +1,88 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208204957.mjs b/.history/module/models/skill_20241208204957.mjs new file mode 100644 index 0000000..0619be8 --- /dev/null +++ b/.history/module/models/skill_20241208204957.mjs @@ -0,0 +1,88 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205030.mjs b/.history/module/models/skill_20241208205030.mjs new file mode 100644 index 0000000..67aa1f0 --- /dev/null +++ b/.history/module/models/skill_20241208205030.mjs @@ -0,0 +1,89 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205040.mjs b/.history/module/models/skill_20241208205040.mjs new file mode 100644 index 0000000..ff02d84 --- /dev/null +++ b/.history/module/models/skill_20241208205040.mjs @@ -0,0 +1,89 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205053.mjs b/.history/module/models/skill_20241208205053.mjs new file mode 100644 index 0000000..acfc52c --- /dev/null +++ b/.history/module/models/skill_20241208205053.mjs @@ -0,0 +1,89 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205057.mjs b/.history/module/models/skill_20241208205057.mjs new file mode 100644 index 0000000..99736bf --- /dev/null +++ b/.history/module/models/skill_20241208205057.mjs @@ -0,0 +1,89 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system. + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205112.mjs b/.history/module/models/skill_20241208205112.mjs new file mode 100644 index 0000000..3402e5a --- /dev/null +++ b/.history/module/models/skill_20241208205112.mjs @@ -0,0 +1,89 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205114.mjs b/.history/module/models/skill_20241208205114.mjs new file mode 100644 index 0000000..7513494 --- /dev/null +++ b/.history/module/models/skill_20241208205114.mjs @@ -0,0 +1,89 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205115.mjs b/.history/module/models/skill_20241208205115.mjs new file mode 100644 index 0000000..5d94a0c --- /dev/null +++ b/.history/module/models/skill_20241208205115.mjs @@ -0,0 +1,89 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205116.mjs b/.history/module/models/skill_20241208205116.mjs new file mode 100644 index 0000000..5d94a0c --- /dev/null +++ b/.history/module/models/skill_20241208205116.mjs @@ -0,0 +1,89 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205119.mjs b/.history/module/models/skill_20241208205119.mjs new file mode 100644 index 0000000..b99df2f --- /dev/null +++ b/.history/module/models/skill_20241208205119.mjs @@ -0,0 +1,90 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > ) + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205127.mjs b/.history/module/models/skill_20241208205127.mjs new file mode 100644 index 0000000..8c35950 --- /dev/null +++ b/.history/module/models/skill_20241208205127.mjs @@ -0,0 +1,90 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205129.mjs b/.history/module/models/skill_20241208205129.mjs new file mode 100644 index 0000000..c3fa5a6 --- /dev/null +++ b/.history/module/models/skill_20241208205129.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + + } + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205137.mjs b/.history/module/models/skill_20241208205137.mjs new file mode 100644 index 0000000..cbc436c --- /dev/null +++ b/.history/module/models/skill_20241208205137.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + this.errors.push("LETHALFANTASY.Errors.skillBonus") + isError = true + } + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205142.mjs b/.history/module/models/skill_20241208205142.mjs new file mode 100644 index 0000000..db08c23 --- /dev/null +++ b/.history/module/models/skill_20241208205142.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + isError = true + } + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205143.mjs b/.history/module/models/skill_20241208205143.mjs new file mode 100644 index 0000000..db08c23 --- /dev/null +++ b/.history/module/models/skill_20241208205143.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + isError = true + } + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205145.mjs b/.history/module/models/skill_20241208205145.mjs new file mode 100644 index 0000000..db08c23 --- /dev/null +++ b/.history/module/models/skill_20241208205145.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + const isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + isError = true + } + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205151.mjs b/.history/module/models/skill_20241208205151.mjs new file mode 100644 index 0000000..2961a72 --- /dev/null +++ b/.history/module/models/skill_20241208205151.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + isError = true + } + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205152.mjs b/.history/module/models/skill_20241208205152.mjs new file mode 100644 index 0000000..2961a72 --- /dev/null +++ b/.history/module/models/skill_20241208205152.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + isError = true + } + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205153.mjs b/.history/module/models/skill_20241208205153.mjs new file mode 100644 index 0000000..2961a72 --- /dev/null +++ b/.history/module/models/skill_20241208205153.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + isError = true + } + console.log("Validating skill", this.name, isError) + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205157.mjs b/.history/module/models/skill_20241208205157.mjs new file mode 100644 index 0000000..3e93e72 --- /dev/null +++ b/.history/module/models/skill_20241208205157.mjs @@ -0,0 +1,91 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205158.mjs b/.history/module/models/skill_20241208205158.mjs new file mode 100644 index 0000000..3e93e72 --- /dev/null +++ b/.history/module/models/skill_20241208205158.mjs @@ -0,0 +1,91 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205202.mjs b/.history/module/models/skill_20241208205202.mjs new file mode 100644 index 0000000..d5ca410 --- /dev/null +++ b/.history/module/models/skill_20241208205202.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205205.mjs b/.history/module/models/skill_20241208205205.mjs new file mode 100644 index 0000000..11a7e58 --- /dev/null +++ b/.history/module/models/skill_20241208205205.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.not + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205206.mjs b/.history/module/models/skill_20241208205206.mjs new file mode 100644 index 0000000..2903dde --- /dev/null +++ b/.history/module/models/skill_20241208205206.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205207.mjs b/.history/module/models/skill_20241208205207.mjs new file mode 100644 index 0000000..2903dde --- /dev/null +++ b/.history/module/models/skill_20241208205207.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205208.mjs b/.history/module/models/skill_20241208205208.mjs new file mode 100644 index 0000000..2903dde --- /dev/null +++ b/.history/module/models/skill_20241208205208.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205209.mjs b/.history/module/models/skill_20241208205209.mjs new file mode 100644 index 0000000..2903dde --- /dev/null +++ b/.history/module/models/skill_20241208205209.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.system.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205248.mjs b/.history/module/models/skill_20241208205248.mjs new file mode 100644 index 0000000..e070252 --- /dev/null +++ b/.history/module/models/skill_20241208205248.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.weaponBonus.attack + this.system.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205250.mjs b/.history/module/models/skill_20241208205250.mjs new file mode 100644 index 0000000..81240c8 --- /dev/null +++ b/.history/module/models/skill_20241208205250.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.weaponBonus.attack + this.weaponBonus.defense + this.system.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205251.mjs b/.history/module/models/skill_20241208205251.mjs new file mode 100644 index 0000000..143998e --- /dev/null +++ b/.history/module/models/skill_20241208205251.mjs @@ -0,0 +1,92 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + let bonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205406.mjs b/.history/module/models/skill_20241208205406.mjs new file mode 100644 index 0000000..ecb9dbe --- /dev/null +++ b/.history/module/models/skill_20241208205406.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205432.mjs b/.history/module/models/skill_20241208205432.mjs new file mode 100644 index 0000000..ada8a21 --- /dev/null +++ b/.history/module/models/skill_20241208205432.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.parent.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205435.mjs b/.history/module/models/skill_20241208205435.mjs new file mode 100644 index 0000000..108381b --- /dev/null +++ b/.history/module/models/skill_20241208205435.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.parent.weaponBonus.attack + this.parent.weaponBonus.defense + this.parent.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205436.mjs b/.history/module/models/skill_20241208205436.mjs new file mode 100644 index 0000000..108381b --- /dev/null +++ b/.history/module/models/skill_20241208205436.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.parent.weaponBonus.attack + this.parent.weaponBonus.defense + this.parent.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205439.mjs b/.history/module/models/skill_20241208205439.mjs new file mode 100644 index 0000000..12b54c9 --- /dev/null +++ b/.history/module/models/skill_20241208205439.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.parent.weaponBonus.attack + this.parent.weaponBonus.defense + this.parent.weaponBonus.damage + if ( bonus > this.parent.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205528.mjs b/.history/module/models/skill_20241208205528.mjs new file mode 100644 index 0000000..b955b7f --- /dev/null +++ b/.history/module/models/skill_20241208205528.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this.parent.weaponBonus.defense + this.parent.weaponBonus.damage + if ( bonus > this.parent.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205532.mjs b/.history/module/models/skill_20241208205532.mjs new file mode 100644 index 0000000..7f63ecd --- /dev/null +++ b/.history/module/models/skill_20241208205532.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this.parent.weaponBonus.damage + if ( bonus > this.parent.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205534.mjs b/.history/module/models/skill_20241208205534.mjs new file mode 100644 index 0000000..aef4b8d --- /dev/null +++ b/.history/module/models/skill_20241208205534.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this.parent.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205536.mjs b/.history/module/models/skill_20241208205536.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205536.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205602.mjs b/.history/module/models/skill_20241208205602.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205602.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205604.mjs b/.history/module/models/skill_20241208205604.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205604.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205658.mjs b/.history/module/models/skill_20241208205658.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205658.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205659.mjs b/.history/module/models/skill_20241208205659.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205659.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205730.mjs b/.history/module/models/skill_20241208205730.mjs new file mode 100644 index 0000000..f56c414 --- /dev/null +++ b/.history/module/models/skill_20241208205730.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205731.mjs b/.history/module/models/skill_20241208205731.mjs new file mode 100644 index 0000000..a50baf1 --- /dev/null +++ b/.history/module/models/skill_20241208205731.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.weaponBonus.attack + this.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205733.mjs b/.history/module/models/skill_20241208205733.mjs new file mode 100644 index 0000000..e9d477a --- /dev/null +++ b/.history/module/models/skill_20241208205733.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205737.mjs b/.history/module/models/skill_20241208205737.mjs new file mode 100644 index 0000000..ecb9dbe --- /dev/null +++ b/.history/module/models/skill_20241208205737.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage + if ( bonus > this.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205857.mjs b/.history/module/models/skill_20241208205857.mjs new file mode 100644 index 0000000..df3b310 --- /dev/null +++ b/.history/module/models/skill_20241208205857.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this..weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205858.mjs b/.history/module/models/skill_20241208205858.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205858.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205859.mjs b/.history/module/models/skill_20241208205859.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205859.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205900.mjs b/.history/module/models/skill_20241208205900.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205900.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205922.mjs b/.history/module/models/skill_20241208205922.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205922.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205923.mjs b/.history/module/models/skill_20241208205923.mjs new file mode 100644 index 0000000..60efb8a --- /dev/null +++ b/.history/module/models/skill_20241208205923.mjs @@ -0,0 +1,93 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205928.mjs b/.history/module/models/skill_20241208205928.mjs new file mode 100644 index 0000000..33e461c --- /dev/null +++ b/.history/module/models/skill_20241208205928.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + consol + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205930.mjs b/.history/module/models/skill_20241208205930.mjs new file mode 100644 index 0000000..0684cec --- /dev/null +++ b/.history/module/models/skill_20241208205930.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205932.mjs b/.history/module/models/skill_20241208205932.mjs new file mode 100644 index 0000000..6386eea --- /dev/null +++ b/.history/module/models/skill_20241208205932.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205933.mjs b/.history/module/models/skill_20241208205933.mjs new file mode 100644 index 0000000..f95da64 --- /dev/null +++ b/.history/module/models/skill_20241208205933.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205934.mjs b/.history/module/models/skill_20241208205934.mjs new file mode 100644 index 0000000..f95da64 --- /dev/null +++ b/.history/module/models/skill_20241208205934.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal)) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205958.mjs b/.history/module/models/skill_20241208205958.mjs new file mode 100644 index 0000000..37b79ef --- /dev/null +++ b/.history/module/models/skill_20241208205958.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208205959.mjs b/.history/module/models/skill_20241208205959.mjs new file mode 100644 index 0000000..37b79ef --- /dev/null +++ b/.history/module/models/skill_20241208205959.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210010.mjs b/.history/module/models/skill_20241208210010.mjs new file mode 100644 index 0000000..a2b62f1 --- /dev/null +++ b/.history/module/models/skill_20241208210010.mjs @@ -0,0 +1,95 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + this.skillTotal = this.computeBase(); + console.log(bonus, this._source.skillTotal) + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210014.mjs b/.history/module/models/skill_20241208210014.mjs new file mode 100644 index 0000000..bc83511 --- /dev/null +++ b/.history/module/models/skill_20241208210014.mjs @@ -0,0 +1,95 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + let skillTotal = this.computeBase(); + console.log(bonus, this._source.skillTotal) + if ( bonus > this._source.skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210016.mjs b/.history/module/models/skill_20241208210016.mjs new file mode 100644 index 0000000..eb4ed06 --- /dev/null +++ b/.history/module/models/skill_20241208210016.mjs @@ -0,0 +1,95 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + let skillTotal = this.computeBase(); + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210017.mjs b/.history/module/models/skill_20241208210017.mjs new file mode 100644 index 0000000..eb4ed06 --- /dev/null +++ b/.history/module/models/skill_20241208210017.mjs @@ -0,0 +1,95 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + let skillTotal = this.computeBase(); + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210059.mjs b/.history/module/models/skill_20241208210059.mjs new file mode 100644 index 0000000..eb4ed06 --- /dev/null +++ b/.history/module/models/skill_20241208210059.mjs @@ -0,0 +1,95 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + let skillTotal = this.computeBase(); + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210107.mjs b/.history/module/models/skill_20241208210107.mjs new file mode 100644 index 0000000..ecb713a --- /dev/null +++ b/.history/module/models/skill_20241208210107.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210108.mjs b/.history/module/models/skill_20241208210108.mjs new file mode 100644 index 0000000..ecb713a --- /dev/null +++ b/.history/module/models/skill_20241208210108.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210109.mjs b/.history/module/models/skill_20241208210109.mjs new file mode 100644 index 0000000..ecb713a --- /dev/null +++ b/.history/module/models/skill_20241208210109.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210110.mjs b/.history/module/models/skill_20241208210110.mjs new file mode 100644 index 0000000..ecb713a --- /dev/null +++ b/.history/module/models/skill_20241208210110.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210111.mjs b/.history/module/models/skill_20241208210111.mjs new file mode 100644 index 0000000..ecb713a --- /dev/null +++ b/.history/module/models/skill_20241208210111.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210112.mjs b/.history/module/models/skill_20241208210112.mjs new file mode 100644 index 0000000..ecb713a --- /dev/null +++ b/.history/module/models/skill_20241208210112.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210113.mjs b/.history/module/models/skill_20241208210113.mjs new file mode 100644 index 0000000..ecb713a --- /dev/null +++ b/.history/module/models/skill_20241208210113.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > skillTotal) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210128.mjs b/.history/module/models/skill_20241208210128.mjs new file mode 100644 index 0000000..6e235ba --- /dev/null +++ b/.history/module/models/skill_20241208210128.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > ) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210132.mjs b/.history/module/models/skill_20241208210132.mjs new file mode 100644 index 0000000..fdab141 --- /dev/null +++ b/.history/module/models/skill_20241208210132.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > Math.floor(this._source.skillTotal / 10) ) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/skill_20241208210133.mjs b/.history/module/models/skill_20241208210133.mjs new file mode 100644 index 0000000..fdab141 --- /dev/null +++ b/.history/module/models/skill_20241208210133.mjs @@ -0,0 +1,94 @@ +import { SYSTEM } from "../config/system.mjs" +import { CATEGORY } from "../config/skill.mjs" +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY }) + schema.base = new fields.StringField({ required: true, initial: "WIS" }) + schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Skill"] + + get skillCategory() { + return game.i18n.localize(CATEGORY[this.category].label) + } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > Math.floor(this._source.skillTotal / 10) ) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat + this.bonus + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + this.bonus + } + } + return `${this.base} + ${String(this.bonus)}`; + } +} diff --git a/.history/module/models/vulnerability_20241130073315.mjs b/.history/module/models/vulnerability_20241130073315.mjs new file mode 100644 index 0000000..4c11057 --- /dev/null +++ b/.history/module/models/vulnerability_20241130073315.mjs @@ -0,0 +1,16 @@ +export default class LethalFantasyVulnerability extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Vulnerability"] + +} diff --git a/.history/module/models/vulnerability_20241217070643.mjs b/.history/module/models/vulnerability_20241217070643.mjs new file mode 100644 index 0000000..7d1e418 --- /dev/null +++ b/.history/module/models/vulnerability_20241217070643.mjs @@ -0,0 +1,17 @@ +export default class LethalFantasyVulnerability extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Vulnerability"] + +} diff --git a/.history/module/models/vulnerability_20241217070645.mjs b/.history/module/models/vulnerability_20241217070645.mjs new file mode 100644 index 0000000..17e20e7 --- /dev/null +++ b/.history/module/models/vulnerability_20241217070645.mjs @@ -0,0 +1,17 @@ +export default class LethalFantasyVulnerability extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + SVGSwitchElement. + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Vulnerability"] + +} diff --git a/.history/module/models/vulnerability_20241217070647.mjs b/.history/module/models/vulnerability_20241217070647.mjs new file mode 100644 index 0000000..854710f --- /dev/null +++ b/.history/module/models/vulnerability_20241217070647.mjs @@ -0,0 +1,17 @@ +export default class LethalFantasyVulnerability extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + scheme. + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Vulnerability"] + +} diff --git a/.history/module/models/vulnerability_20241217070658.mjs b/.history/module/models/vulnerability_20241217070658.mjs new file mode 100644 index 0000000..7c4eb58 --- /dev/null +++ b/.history/module/models/vulnerability_20241217070658.mjs @@ -0,0 +1,17 @@ +export default class LethalFantasyVulnerability extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + scheme.gainedPoints = + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Vulnerability"] + +} diff --git a/.history/module/models/vulnerability_20241217070659.mjs b/.history/module/models/vulnerability_20241217070659.mjs new file mode 100644 index 0000000..bb97b78 --- /dev/null +++ b/.history/module/models/vulnerability_20241217070659.mjs @@ -0,0 +1,17 @@ +export default class LethalFantasyVulnerability extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + scheme.gainedPoints = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Vulnerability"] + +} diff --git a/.history/module/models/vulnerability_20241217070702.mjs b/.history/module/models/vulnerability_20241217070702.mjs new file mode 100644 index 0000000..3ad6a04 --- /dev/null +++ b/.history/module/models/vulnerability_20241217070702.mjs @@ -0,0 +1,17 @@ +export default class LethalFantasyVulnerability extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.gainedPoints = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Vulnerability"] + +} diff --git a/.history/module/models/weapon_20241207222848.mjs b/.history/module/models/weapon_20241207222848.mjs new file mode 100644 index 0000000..f95b6ad --- /dev/null +++ b/.history/module/models/weapon_20241207222848.mjs @@ -0,0 +1,54 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241208155859.mjs b/.history/module/models/weapon_20241208155859.mjs new file mode 100644 index 0000000..25d3ddb --- /dev/null +++ b/.history/module/models/weapon_20241208155859.mjs @@ -0,0 +1,55 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241208155901.mjs b/.history/module/models/weapon_20241208155901.mjs new file mode 100644 index 0000000..bdcba4e --- /dev/null +++ b/.history/module/models/weapon_20241208155901.mjs @@ -0,0 +1,55 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241208155902.mjs b/.history/module/models/weapon_20241208155902.mjs new file mode 100644 index 0000000..20753fa --- /dev/null +++ b/.history/module/models/weapon_20241208155902.mjs @@ -0,0 +1,56 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241210071237.mjs b/.history/module/models/weapon_20241210071237.mjs new file mode 100644 index 0000000..cbb430e --- /dev/null +++ b/.history/module/models/weapon_20241210071237.mjs @@ -0,0 +1,56 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.NumberField({ required: true, initial: "0", min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241210071617.mjs b/.history/module/models/weapon_20241210071617.mjs new file mode 100644 index 0000000..198c1cc --- /dev/null +++ b/.history/module/models/weapon_20241210071617.mjs @@ -0,0 +1,56 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: "0", min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241210071618.mjs b/.history/module/models/weapon_20241210071618.mjs new file mode 100644 index 0000000..198c1cc --- /dev/null +++ b/.history/module/models/weapon_20241210071618.mjs @@ -0,0 +1,56 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: "0", min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241210071850.mjs b/.history/module/models/weapon_20241210071850.mjs new file mode 100644 index 0000000..6c4be1b --- /dev/null +++ b/.history/module/models/weapon_20241210071850.mjs @@ -0,0 +1,56 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241210172431.mjs b/.history/module/models/weapon_20241210172431.mjs new file mode 100644 index 0000000..0d62c31 --- /dev/null +++ b/.history/module/models/weapon_20241210172431.mjs @@ -0,0 +1,57 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070154.mjs b/.history/module/models/weapon_20241217070154.mjs new file mode 100644 index 0000000..e42b7f2 --- /dev/null +++ b/.history/module/models/weapon_20241217070154.mjs @@ -0,0 +1,57 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: [["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070159.mjs b/.history/module/models/weapon_20241217070159.mjs new file mode 100644 index 0000000..3eb094b --- /dev/null +++ b/.history/module/models/weapon_20241217070159.mjs @@ -0,0 +1,57 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {1: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070201.mjs b/.history/module/models/weapon_20241217070201.mjs new file mode 100644 index 0000000..f15948b --- /dev/null +++ b/.history/module/models/weapon_20241217070201.mjs @@ -0,0 +1,57 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {1: "1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070204.mjs b/.history/module/models/weapon_20241217070204.mjs new file mode 100644 index 0000000..cdd53a8 --- /dev/null +++ b/.history/module/models/weapon_20241217070204.mjs @@ -0,0 +1,57 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {1: "1", 2: "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070205.mjs b/.history/module/models/weapon_20241217070205.mjs new file mode 100644 index 0000000..b806f16 --- /dev/null +++ b/.history/module/models/weapon_20241217070205.mjs @@ -0,0 +1,57 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {1: "1", 2: "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070211.mjs b/.history/module/models/weapon_20241217070211.mjs new file mode 100644 index 0000000..c522207 --- /dev/null +++ b/.history/module/models/weapon_20241217070211.mjs @@ -0,0 +1,57 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070212.mjs b/.history/module/models/weapon_20241217070212.mjs new file mode 100644 index 0000000..c522207 --- /dev/null +++ b/.history/module/models/weapon_20241217070212.mjs @@ -0,0 +1,57 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070242.mjs b/.history/module/models/weapon_20241217070242.mjs new file mode 100644 index 0000000..f82852a --- /dev/null +++ b/.history/module/models/weapon_20241217070242.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070248.mjs b/.history/module/models/weapon_20241217070248.mjs new file mode 100644 index 0000000..90db4c9 --- /dev/null +++ b/.history/module/models/weapon_20241217070248.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070250.mjs b/.history/module/models/weapon_20241217070250.mjs new file mode 100644 index 0000000..a064361 --- /dev/null +++ b/.history/module/models/weapon_20241217070250.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + sschema.combatProgressionDice = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070253.mjs b/.history/module/models/weapon_20241217070253.mjs new file mode 100644 index 0000000..90db4c9 --- /dev/null +++ b/.history/module/models/weapon_20241217070253.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070501.mjs b/.history/module/models/weapon_20241217070501.mjs new file mode 100644 index 0000000..f90cf4e --- /dev/null +++ b/.history/module/models/weapon_20241217070501.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4"}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070505.mjs b/.history/module/models/weapon_20241217070505.mjs new file mode 100644 index 0000000..3fb8734 --- /dev/null +++ b/.history/module/models/weapon_20241217070505.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4", choices: }) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070506.mjs b/.history/module/models/weapon_20241217070506.mjs new file mode 100644 index 0000000..f05a82e --- /dev/null +++ b/.history/module/models/weapon_20241217070506.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4", choices: COMBAT_PROGRESSION_DICE}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070510.mjs b/.history/module/models/weapon_20241217070510.mjs new file mode 100644 index 0000000..fa8483d --- /dev/null +++ b/.history/module/models/weapon_20241217070510.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4", choices: SYSTEM.COMBAT_PROGRESSION_DICE}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070511.mjs b/.history/module/models/weapon_20241217070511.mjs new file mode 100644 index 0000000..fa8483d --- /dev/null +++ b/.history/module/models/weapon_20241217070511.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4", choices: SYSTEM.COMBAT_PROGRESSION_DICE}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/models/weapon_20241217070512.mjs b/.history/module/models/weapon_20241217070512.mjs new file mode 100644 index 0000000..fa8483d --- /dev/null +++ b/.history/module/models/weapon_20241217070512.mjs @@ -0,0 +1,58 @@ +import { SYSTEM } from "../config/system.mjs" + +export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() + }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4", choices: SYSTEM.COMBAT_PROGRESSION_DICE}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.weaponRange = new fields.SchemaField({ + pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + schema.equipped = new fields.BooleanField({ required: true, initial: false }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] + + get weaponCategory() { + return game.i18n.localize(CATEGORY[this.weaponType].label) + } +} diff --git a/.history/module/utils_20241121235547.mjs b/.history/module/utils_20241121235547.mjs new file mode 100644 index 0000000..22dab28 --- /dev/null +++ b/.history/module/utils_20241121235547.mjs @@ -0,0 +1,23 @@ +import { DICE_VALUES } from "./config/system.mjs" + +export default class LethalFantasyUtils { + // Return the maximum damage limited by the maximum damage of the character + static maxDamage(damage, damageMax) { + const damageIndex = DICE_VALUES.indexOf(damage) + const damageMaxIndex = DICE_VALUES.indexOf(damageMax) + + // If damage exceeds damageMax, return damageMax + if (damageIndex > damageMaxIndex) { + return damageMax + } + + // Otherwise, return damage (as it is less than or equal to damageMax) + return damage + } + + // Used when a ressource is lost to find the next lower dice + static findLowerDice(dice) { + let index = DICE_VALUES.indexOf(dice) + return DICE_VALUES[index - 1] + } +} diff --git a/.history/module/utils_20241208203936.mjs b/.history/module/utils_20241208203936.mjs new file mode 100644 index 0000000..fa1ec20 --- /dev/null +++ b/.history/module/utils_20241208203936.mjs @@ -0,0 +1,15 @@ +import { DICE_VALUES } from "./config/system.mjs" + +export default class LethalFantasyUtils { + // Return the maximum damage limited by the maximum damage of the character + static maxDamage(damage, damageMax) { + // Otherwise, return damage (as it is less than or equal to damageMax) + return damage + } + + // Used when a ressource is lost to find the next lower dice + static findLowerDice(dice) { + let index = DICE_VALUES.indexOf(dice) + return DICE_VALUES[index - 1] + } +} diff --git a/.history/module/utils_20241208203937.mjs b/.history/module/utils_20241208203937.mjs new file mode 100644 index 0000000..8cee1db --- /dev/null +++ b/.history/module/utils_20241208203937.mjs @@ -0,0 +1,15 @@ +import { DICE_VALUES } from "./config/system.mjs" + +export default class LethalFantasyUtils { + // Return the maximum damage limited by the maximum damage of the character + static maxDamage(damage, damageMax) { + // Otherwise, return damage (as it is less than or equal to damageMax) + return 0 + } + + // Used when a ressource is lost to find the next lower dice + static findLowerDice(dice) { + let index = DICE_VALUES.indexOf(dice) + return DICE_VALUES[index - 1] + } +} diff --git a/.history/module/utils_20241208203944.mjs b/.history/module/utils_20241208203944.mjs new file mode 100644 index 0000000..a55a4f2 --- /dev/null +++ b/.history/module/utils_20241208203944.mjs @@ -0,0 +1,14 @@ +import { DICE_VALUES } from "./config/system.mjs" + +export default class LethalFantasyUtils { + // Return the maximum damage limited by the maximum damage of the character + static maxDamage(damage, damageMax) { + // Otherwise, return damage (as it is less than or equal to damageMax) + return 0 + } + + // Used when a ressource is lost to find the next lower dice + static findLowerDice(dice) { + return 0 + } +} diff --git a/.history/module/utils_20241208203945.mjs b/.history/module/utils_20241208203945.mjs new file mode 100644 index 0000000..a55a4f2 --- /dev/null +++ b/.history/module/utils_20241208203945.mjs @@ -0,0 +1,14 @@ +import { DICE_VALUES } from "./config/system.mjs" + +export default class LethalFantasyUtils { + // Return the maximum damage limited by the maximum damage of the character + static maxDamage(damage, damageMax) { + // Otherwise, return damage (as it is less than or equal to damageMax) + return 0 + } + + // Used when a ressource is lost to find the next lower dice + static findLowerDice(dice) { + return 0 + } +} diff --git a/.history/module/utils_20241208204002.mjs b/.history/module/utils_20241208204002.mjs new file mode 100644 index 0000000..a55a4f2 --- /dev/null +++ b/.history/module/utils_20241208204002.mjs @@ -0,0 +1,14 @@ +import { DICE_VALUES } from "./config/system.mjs" + +export default class LethalFantasyUtils { + // Return the maximum damage limited by the maximum damage of the character + static maxDamage(damage, damageMax) { + // Otherwise, return damage (as it is less than or equal to damageMax) + return 0 + } + + // Used when a ressource is lost to find the next lower dice + static findLowerDice(dice) { + return 0 + } +} diff --git a/.history/module/utils_20241208204004.mjs b/.history/module/utils_20241208204004.mjs new file mode 100644 index 0000000..1f38535 --- /dev/null +++ b/.history/module/utils_20241208204004.mjs @@ -0,0 +1,13 @@ + +export default class LethalFantasyUtils { + // Return the maximum damage limited by the maximum damage of the character + static maxDamage(damage, damageMax) { + // Otherwise, return damage (as it is less than or equal to damageMax) + return 0 + } + + // Used when a ressource is lost to find the next lower dice + static findLowerDice(dice) { + return 0 + } +} diff --git a/.history/styles/character_20241207085600.less b/.history/styles/character_20241207085600.less new file mode 100644 index 0000000..c16d357 --- /dev/null +++ b/.history/styles/character_20241207085600.less @@ -0,0 +1,358 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .experience { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + input[type="checkbox"] { + width: 20px; + } + input[type="checkbox"]:checked { + background-color: rgba(0, 0, 0, 0.1); + } + input[type="checkbox"]:checked::after { + color: rgba(0, 0, 0, 0.1); + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210211946.less b/.history/styles/character_20241210211946.less new file mode 100644 index 0000000..4233709 --- /dev/null +++ b/.history/styles/character_20241210211946.less @@ -0,0 +1,332 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210211954.less b/.history/styles/character_20241210211954.less new file mode 100644 index 0000000..5ee38ad --- /dev/null +++ b/.history/styles/character_20241210211954.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210211958.less b/.history/styles/character_20241210211958.less new file mode 100644 index 0000000..de62ec9 --- /dev/null +++ b/.history/styles/character_20241210211958.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212000.less b/.history/styles/character_20241210212000.less new file mode 100644 index 0000000..d892954 --- /dev/null +++ b/.history/styles/character_20241210212000.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212010.less b/.history/styles/character_20241210212010.less new file mode 100644 index 0000000..6c8f7dc --- /dev/null +++ b/.history/styles/character_20241210212010.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 2; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212016.less b/.history/styles/character_20241210212016.less new file mode 100644 index 0000000..d892954 --- /dev/null +++ b/.history/styles/character_20241210212016.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212032.less b/.history/styles/character_20241210212032.less new file mode 100644 index 0000000..9b2bf93 --- /dev/null +++ b/.history/styles/character_20241210212032.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 40px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212039.less b/.history/styles/character_20241210212039.less new file mode 100644 index 0000000..63f6faa --- /dev/null +++ b/.history/styles/character_20241210212039.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212134.less b/.history/styles/character_20241210212134.less new file mode 100644 index 0000000..63f6faa --- /dev/null +++ b/.history/styles/character_20241210212134.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212135.less b/.history/styles/character_20241210212135.less new file mode 100644 index 0000000..63f6faa --- /dev/null +++ b/.history/styles/character_20241210212135.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212141.less b/.history/styles/character_20241210212141.less new file mode 100644 index 0000000..07e1eb5 --- /dev/null +++ b/.history/styles/character_20241210212141.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 0; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212147.less b/.history/styles/character_20241210212147.less new file mode 100644 index 0000000..63f6faa --- /dev/null +++ b/.history/styles/character_20241210212147.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212150.less b/.history/styles/character_20241210212150.less new file mode 100644 index 0000000..63f6faa --- /dev/null +++ b/.history/styles/character_20241210212150.less @@ -0,0 +1,357 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212352.less b/.history/styles/character_20241210212352.less new file mode 100644 index 0000000..2192584 --- /dev/null +++ b/.history/styles/character_20241210212352.less @@ -0,0 +1,360 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212356.less b/.history/styles/character_20241210212356.less new file mode 100644 index 0000000..2c973f4 --- /dev/null +++ b/.history/styles/character_20241210212356.less @@ -0,0 +1,361 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min: + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212357.less b/.history/styles/character_20241210212357.less new file mode 100644 index 0000000..1366890 --- /dev/null +++ b/.history/styles/character_20241210212357.less @@ -0,0 +1,361 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212358.less b/.history/styles/character_20241210212358.less new file mode 100644 index 0000000..de166d0 --- /dev/null +++ b/.history/styles/character_20241210212358.less @@ -0,0 +1,361 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: none; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212401.less b/.history/styles/character_20241210212401.less new file mode 100644 index 0000000..691c9c8 --- /dev/null +++ b/.history/styles/character_20241210212401.less @@ -0,0 +1,361 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 200px; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212412.less b/.history/styles/character_20241210212412.less new file mode 100644 index 0000000..156a07a --- /dev/null +++ b/.history/styles/character_20241210212412.less @@ -0,0 +1,361 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 6rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212419.less b/.history/styles/character_20241210212419.less new file mode 100644 index 0000000..a7dd5c8 --- /dev/null +++ b/.history/styles/character_20241210212419.less @@ -0,0 +1,361 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212429.less b/.history/styles/character_20241210212429.less new file mode 100644 index 0000000..493ed66 --- /dev/null +++ b/.history/styles/character_20241210212429.less @@ -0,0 +1,362 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212431.less b/.history/styles/character_20241210212431.less new file mode 100644 index 0000000..3c0df57 --- /dev/null +++ b/.history/styles/character_20241210212431.less @@ -0,0 +1,362 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + mari + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212432.less b/.history/styles/character_20241210212432.less new file mode 100644 index 0000000..dfa7b1f --- /dev/null +++ b/.history/styles/character_20241210212432.less @@ -0,0 +1,362 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + mar + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212435.less b/.history/styles/character_20241210212435.less new file mode 100644 index 0000000..0f1da56 --- /dev/null +++ b/.history/styles/character_20241210212435.less @@ -0,0 +1,362 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: ; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212437.less b/.history/styles/character_20241210212437.less new file mode 100644 index 0000000..fd66c8e --- /dev/null +++ b/.history/styles/character_20241210212437.less @@ -0,0 +1,362 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 0.3rem;; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212439.less b/.history/styles/character_20241210212439.less new file mode 100644 index 0000000..59d574b --- /dev/null +++ b/.history/styles/character_20241210212439.less @@ -0,0 +1,362 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 0.3rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212447.less b/.history/styles/character_20241210212447.less new file mode 100644 index 0000000..ddc8754 --- /dev/null +++ b/.history/styles/character_20241210212447.less @@ -0,0 +1,362 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212618.less b/.history/styles/character_20241210212618.less new file mode 100644 index 0000000..fffc544 --- /dev/null +++ b/.history/styles/character_20241210212618.less @@ -0,0 +1,363 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left:0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212619.less b/.history/styles/character_20241210212619.less new file mode 100644 index 0000000..6f147e4 --- /dev/null +++ b/.history/styles/character_20241210212619.less @@ -0,0 +1,363 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210212656.less b/.history/styles/character_20241210212656.less new file mode 100644 index 0000000..6f147e4 --- /dev/null +++ b/.history/styles/character_20241210212656.less @@ -0,0 +1,363 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210225459.less b/.history/styles/character_20241210225459.less new file mode 100644 index 0000000..d1af1a8 --- /dev/null +++ b/.history/styles/character_20241210225459.less @@ -0,0 +1,393 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210225503.less b/.history/styles/character_20241210225503.less new file mode 100644 index 0000000..e537cdd --- /dev/null +++ b/.history/styles/character_20241210225503.less @@ -0,0 +1,393 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210225508.less b/.history/styles/character_20241210225508.less new file mode 100644 index 0000000..e3d9e20 --- /dev/null +++ b/.history/styles/character_20241210225508.less @@ -0,0 +1,393 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210231314.less b/.history/styles/character_20241210231314.less new file mode 100644 index 0000000..ba8f23c --- /dev/null +++ b/.history/styles/character_20241210231314.less @@ -0,0 +1,424 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210231320.less b/.history/styles/character_20241210231320.less new file mode 100644 index 0000000..51bbba0 --- /dev/null +++ b/.history/styles/character_20241210231320.less @@ -0,0 +1,424 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-movements { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210231323.less b/.history/styles/character_20241210231323.less new file mode 100644 index 0000000..1ede633 --- /dev/null +++ b/.history/styles/character_20241210231323.less @@ -0,0 +1,424 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-movements { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-movement { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210231521.less b/.history/styles/character_20241210231521.less new file mode 100644 index 0000000..bd3159e --- /dev/null +++ b/.history/styles/character_20241210231521.less @@ -0,0 +1,424 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-movements { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-movement { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210231528.less b/.history/styles/character_20241210231528.less new file mode 100644 index 0000000..bd3159e --- /dev/null +++ b/.history/styles/character_20241210231528.less @@ -0,0 +1,424 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-movements { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-movement { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210231535.less b/.history/styles/character_20241210231535.less new file mode 100644 index 0000000..d45adef --- /dev/null +++ b/.history/styles/character_20241210231535.less @@ -0,0 +1,424 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-movements { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-movement { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 4rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/character_20241210231540.less b/.history/styles/character_20241210231540.less new file mode 100644 index 0000000..a60bdf3 --- /dev/null +++ b/.history/styles/character_20241210231540.less @@ -0,0 +1,424 @@ +.character-content { + .sheet-common(); + .character-sheet-common(); + overflow: scroll; +} + +.character-main { + display: flex; + + .character-pc { + display: flex; + gap: 10px; + flex: 1; + + .character-left { + min-width: 180px; + display: flex; + flex-direction: column; + + .character-left-image { + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 20px; + .character-img { + height: 140px; + width: auto; + border: none; + } + } + + .character-hp-edit { + input { + display: flex; + width: 60px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + text-align: center; + } + } + } + + .character-right { + display: flex; + flex-direction: column; + gap: 5px; + + .character-name { + display: flex; + input { + width: 400px; + } + } + + .character-infos { + display: flex; + flex-direction: column; + gap: 10px; + + label { + min-width: 120px; + } + .character-hp { + display: flex; + gap: 2px; + align-items: center; + .character-hp-value { + .form-fields input { + flex: none; + width: 50px; + margin-left: 10px; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .character-hp-max { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 3px 0; + align-items: center; + input { + width: 50px; + text-align: center; + font-size: calc(var(--font-size-standard) * 1.4); + } + } + .hp-separator { + font-size: calc(var(--font-size-standard) * 1.2); + display: flex; + align-items: center; + justify-content: center; + } + } + } + } + } + + .character-pc-play { + min-width: 500px; + } + + .character-pc-edit { + min-width: 650px; + } + + .character-characteristics { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-characteristic { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-movements { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-movement { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; + } + } + } + } + + .character-characteristics-play { + min-width: 225px; + } + + .character-characteristic-edit { + min-width: 400px; + } + + .character-resources { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-resource { + display: flex; + align-items: center; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: + pointer; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 70px; + } + } + .character-resource-edit { + display: flex; + align-items: center; + gap: 10px; + margin-left: 10px; + input { + display: flex; + width: 70px; + font-size: calc(var(--font-size-standard) * 1.4); + align-items: center; + justify-content: center; + padding: 0 5px 0 5px; + } + input[type="number"] { + text-align: center; + } + select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.5); + text-align: center; + width: 75px; + } + } + } + } + + .character-resources-play { + min-width: 235px; + } + + .character-resources-edit { + min-width: 400px; + } +} + +.character-biography { + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-skills { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .skills { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .skill { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .weapons { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + .weapon { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } + .armors { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .armor { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + margin: 5px 0 0 0; + } + } + } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + + .spells { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + .spell { + display: flex; + gap: 10px; + } + } + + .appris { + font-weight: bold; + } + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/.history/styles/fvtt-lethal-fantasy_20241201145505.less b/.history/styles/fvtt-lethal-fantasy_20241201145505.less new file mode 100644 index 0000000..5f3a54d --- /dev/null +++ b/.history/styles/fvtt-lethal-fantasy_20241201145505.less @@ -0,0 +1,20 @@ +@import "global.less"; + +.lethalfantasy { + @import "mixins.less"; + @import "character.less"; + @import "opponent.less"; + @import "skill.less"; + @import "gift.less"; + @import "weapon.less"; + @import "armor.less"; + @import "spell.less"; + @import "vulnerability.less"; + @import "save.less"; + @import "chat.less"; + @import "equipment.less"; + @import "shield.less"; +} + +@import "roll.less"; +@import "application-manager.less"; diff --git a/.history/styles/fvtt-lethal-fantasy_20241209151130.less b/.history/styles/fvtt-lethal-fantasy_20241209151130.less new file mode 100644 index 0000000..c7b67b9 --- /dev/null +++ b/.history/styles/fvtt-lethal-fantasy_20241209151130.less @@ -0,0 +1,21 @@ +@import "global.less"; + +.lethalfantasy { + @import "mixins.less"; + @import "character.less"; + @import "opponent.less"; + @import "skill.less"; + @import "gift.less"; + @import "weapon.less"; + @import "armor.less"; + @import "spell.less"; + @import "vulnerability.less"; + @import "save.less"; + @import "chat.less"; + @import "equipment.less"; + @import "shield.less"; + +} + +@import "roll.less"; +@import "application-manager.less"; diff --git a/.history/styles/fvtt-lethal-fantasy_20241209151132.less b/.history/styles/fvtt-lethal-fantasy_20241209151132.less new file mode 100644 index 0000000..60686bb --- /dev/null +++ b/.history/styles/fvtt-lethal-fantasy_20241209151132.less @@ -0,0 +1,21 @@ +@import "global.less"; + +.lethalfantasy { + @import "mixins.less"; + @import "character.less"; + @import "opponent.less"; + @import "skill.less"; + @import "gift.less"; + @import "weapon.less"; + @import "armor.less"; + @import "spell.less"; + @import "vulnerability.less"; + @import "save.less"; + @import "chat.less"; + @import "equipment.less"; + @import "shield.less"; + @import "item.less"; +} + +@import "roll.less"; +@import "application-manager.less"; diff --git a/.history/styles/fvtt-lethal-fantasy_20241209151134.less b/.history/styles/fvtt-lethal-fantasy_20241209151134.less new file mode 100644 index 0000000..ce3890d --- /dev/null +++ b/.history/styles/fvtt-lethal-fantasy_20241209151134.less @@ -0,0 +1,21 @@ +@import "global.less"; + +.lethalfantasy { + @import "mixins.less"; + @import "character.less"; + @import "opponent.less"; + @import "skill.less"; + @import "gift.less"; + @import "weapon.less"; + @import "armor.less"; + @import "spell.less"; + @import "vulnerability.less"; + @import "save.less"; + @import "chat.less"; + @import "equipment.less"; + @import "shield.less"; + @import "miracle.less"; +} + +@import "roll.less"; +@import "application-manager.less"; diff --git a/.history/styles/fvtt-lethal-fantasy_20241210071307.less b/.history/styles/fvtt-lethal-fantasy_20241210071307.less new file mode 100644 index 0000000..c39bfba --- /dev/null +++ b/.history/styles/fvtt-lethal-fantasy_20241210071307.less @@ -0,0 +1,20 @@ +@import "global.less"; + +.lethalfantasy { + @import "mixins.less"; + @import "character.less"; + @import "opponent.less"; + @import "skill.less"; + @import "gift.less"; + @import "weapon.less"; + @import "armor.less"; + @import "spell.less"; + @import "vulnerability.less"; + @import "chat.less"; + @import "equipment.less"; + @import "shield.less"; + @import "miracle.less"; +} + +@import "roll.less"; +@import "application-manager.less"; diff --git a/.history/styles/miracle_20241209151116.less b/.history/styles/miracle_20241209151116.less new file mode 100644 index 0000000..e69de29 diff --git a/.history/styles/miracle_20241209151119.less b/.history/styles/miracle_20241209151119.less new file mode 100644 index 0000000..836f429 --- /dev/null +++ b/.history/styles/miracle_20241209151119.less @@ -0,0 +1,17 @@ +.spell-content { + .sheet-common(); + .item-sheet-common(); + + .header { + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } + +} diff --git a/.history/styles/miracle_20241209151121.less b/.history/styles/miracle_20241209151121.less new file mode 100644 index 0000000..e8376fd --- /dev/null +++ b/.history/styles/miracle_20241209151121.less @@ -0,0 +1,17 @@ +.miracle-content { + .sheet-common(); + .item-sheet-common(); + + .header { + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } + +} diff --git a/.history/styles/miracle_20241209151123.less b/.history/styles/miracle_20241209151123.less new file mode 100644 index 0000000..e8376fd --- /dev/null +++ b/.history/styles/miracle_20241209151123.less @@ -0,0 +1,17 @@ +.miracle-content { + .sheet-common(); + .item-sheet-common(); + + .header { + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } + +} diff --git a/.history/styles/miracle_20241209151125.less b/.history/styles/miracle_20241209151125.less new file mode 100644 index 0000000..e8376fd --- /dev/null +++ b/.history/styles/miracle_20241209151125.less @@ -0,0 +1,17 @@ +.miracle-content { + .sheet-common(); + .item-sheet-common(); + + .header { + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } + +} diff --git a/.history/system_20241207223959.json b/.history/system_20241207223959.json new file mode 100644 index 0000000..9d1a10b --- /dev/null +++ b/.history/system_20241207223959.json @@ -0,0 +1,70 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "#{VERSION}#", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "save": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241209231426.json b/.history/system_20241209231426.json new file mode 100644 index 0000000..d7af5cf --- /dev/null +++ b/.history/system_20241209231426.json @@ -0,0 +1,71 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "#{VERSION}#", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "save": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] } + "equipment": { "htmlFields": ["description"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241209231428.json b/.history/system_20241209231428.json new file mode 100644 index 0000000..89ce1ce --- /dev/null +++ b/.history/system_20241209231428.json @@ -0,0 +1,71 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "#{VERSION}#", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "save": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241209231431.json b/.history/system_20241209231431.json new file mode 100644 index 0000000..c57c5b9 --- /dev/null +++ b/.history/system_20241209231431.json @@ -0,0 +1,71 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "#{VERSION}#", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "save": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] }, + "miracle": { "htmlFields": ["description"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241209231432.json b/.history/system_20241209231432.json new file mode 100644 index 0000000..7c5ddaa --- /dev/null +++ b/.history/system_20241209231432.json @@ -0,0 +1,71 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "#{VERSION}#", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "save": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] }, + "miracle": { "htmlFields": ["miracle"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241210070129.json b/.history/system_20241210070129.json new file mode 100644 index 0000000..501aac6 --- /dev/null +++ b/.history/system_20241210070129.json @@ -0,0 +1,71 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "12.0.2", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "save": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] }, + "miracle": { "htmlFields": ["miracle"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241210071346.json b/.history/system_20241210071346.json new file mode 100644 index 0000000..2e55e9b --- /dev/null +++ b/.history/system_20241210071346.json @@ -0,0 +1,70 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "12.0.2", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] }, + "miracle": { "htmlFields": ["miracle"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241210174329.json b/.history/system_20241210174329.json new file mode 100644 index 0000000..b55ae92 --- /dev/null +++ b/.history/system_20241210174329.json @@ -0,0 +1,70 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "12.0.3", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] }, + "miracle": { "htmlFields": ["miracle"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241210231017.json b/.history/system_20241210231017.json new file mode 100644 index 0000000..b55ae92 --- /dev/null +++ b/.history/system_20241210231017.json @@ -0,0 +1,70 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "12.0.3", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] }, + "miracle": { "htmlFields": ["miracle"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/system_20241217070806.json b/.history/system_20241217070806.json new file mode 100644 index 0000000..7b14e91 --- /dev/null +++ b/.history/system_20241217070806.json @@ -0,0 +1,70 @@ +{ + "id": "fvtt-lethal-fantasy", + "title": "Lethal Fantasy RPG", + "description": "", + "manifest": "#{MANIFEST}#", + "download": "#{DOWNLOAD}#", + "url": "#{URL}#", + "license": "LICENSE", + "version": "12.0.4", + "authors": [ + { + "name": "Uberwald", + "discord": "LeRatierBretonnien" + } + ], + "compatibility": { + "minimum": "12", + "verified": "12" + }, + "esmodules": ["lethal-fantasy.mjs"], + "styles": ["css/fvtt-lethal-fantasy.css"], + "languages": [ + { + "lang": "en", + "name": "Anglais", + "path": "lang/en.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description", "notes"] }, + "opponent": { "htmlFields": ["description"] } + }, + "Item": { + "skill": { "htmlFields": ["description"] }, + "gift": { "htmlFields": ["description"] }, + "vulnerability": { "htmlFields": ["description"] }, + "weapon": { "htmlFields": ["description"] }, + "armor": { "htmlFields": ["description"] }, + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] }, + "miracle": { "htmlFields": ["miracle"] } + } + }, + "grid": { + "distance": 10, + "units": "m" + }, + "primaryTokenAttribute": "hp", + "socket": true, + "background": "systems/fvtt-lethal-fantasy/assets/background.webp", + "packs": [ + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } +} diff --git a/.history/templates/armor_20241201145025.hbs b/.history/templates/armor_20241201145025.hbs new file mode 100644 index 0000000..7ab06b3 --- /dev/null +++ b/.history/templates/armor_20241201145025.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070528.hbs b/.history/templates/armor_20241210070528.hbs new file mode 100644 index 0000000..7ab06b3 --- /dev/null +++ b/.history/templates/armor_20241210070528.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070529.hbs b/.history/templates/armor_20241210070529.hbs new file mode 100644 index 0000000..7ab06b3 --- /dev/null +++ b/.history/templates/armor_20241210070529.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070530.hbs b/.history/templates/armor_20241210070530.hbs new file mode 100644 index 0000000..5a4190d --- /dev/null +++ b/.history/templates/armor_20241210070530.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.descriptions + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070533.hbs b/.history/templates/armor_20241210070533.hbs new file mode 100644 index 0000000..5a4190d --- /dev/null +++ b/.history/templates/armor_20241210070533.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.descriptions + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070534.hbs b/.history/templates/armor_20241210070534.hbs new file mode 100644 index 0000000..5a4190d --- /dev/null +++ b/.history/templates/armor_20241210070534.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.descriptions + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070701.hbs b/.history/templates/armor_20241210070701.hbs new file mode 100644 index 0000000..7ab06b3 --- /dev/null +++ b/.history/templates/armor_20241210070701.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070736.hbs b/.history/templates/armor_20241210070736.hbs new file mode 100644 index 0000000..5638a65 --- /dev/null +++ b/.history/templates/armor_20241210070736.hbs @@ -0,0 +1,26 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070751.hbs b/.history/templates/armor_20241210070751.hbs new file mode 100644 index 0000000..7ab06b3 --- /dev/null +++ b/.history/templates/armor_20241210070751.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070755.hbs b/.history/templates/armor_20241210070755.hbs new file mode 100644 index 0000000..7ab06b3 --- /dev/null +++ b/.history/templates/armor_20241210070755.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070818.hbs b/.history/templates/armor_20241210070818.hbs new file mode 100644 index 0000000..7ab06b3 --- /dev/null +++ b/.history/templates/armor_20241210070818.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070952.hbs b/.history/templates/armor_20241210070952.hbs new file mode 100644 index 0000000..0e950ec --- /dev/null +++ b/.history/templates/armor_20241210070952.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210070955.hbs b/.history/templates/armor_20241210070955.hbs new file mode 100644 index 0000000..0dbc61b --- /dev/null +++ b/.history/templates/armor_20241210070955.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210071015.hbs b/.history/templates/armor_20241210071015.hbs new file mode 100644 index 0000000..8155b52 --- /dev/null +++ b/.history/templates/armor_20241210071015.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210071020.hbs b/.history/templates/armor_20241210071020.hbs new file mode 100644 index 0000000..63eee1c --- /dev/null +++ b/.history/templates/armor_20241210071020.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210071023.hbs b/.history/templates/armor_20241210071023.hbs new file mode 100644 index 0000000..faa2ec9 --- /dev/null +++ b/.history/templates/armor_20241210071023.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210071034.hbs b/.history/templates/armor_20241210071034.hbs new file mode 100644 index 0000000..6bcd12e --- /dev/null +++ b/.history/templates/armor_20241210071034.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210071035.hbs b/.history/templates/armor_20241210071035.hbs new file mode 100644 index 0000000..6bcd12e --- /dev/null +++ b/.history/templates/armor_20241210071035.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210071641.hbs b/.history/templates/armor_20241210071641.hbs new file mode 100644 index 0000000..7d54c9a --- /dev/null +++ b/.history/templates/armor_20241210071641.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.load value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210071642.hbs b/.history/templates/armor_20241210071642.hbs new file mode 100644 index 0000000..0aa6044 --- /dev/null +++ b/.history/templates/armor_20241210071642.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210071758.hbs b/.history/templates/armor_20241210071758.hbs new file mode 100644 index 0000000..0bcc52e --- /dev/null +++ b/.history/templates/armor_20241210071758.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210072317.hbs b/.history/templates/armor_20241210072317.hbs new file mode 100644 index 0000000..a4f5be5 --- /dev/null +++ b/.history/templates/armor_20241210072317.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210072318.hbs b/.history/templates/armor_20241210072318.hbs new file mode 100644 index 0000000..a4f5be5 --- /dev/null +++ b/.history/templates/armor_20241210072318.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210172459.hbs b/.history/templates/armor_20241210172459.hbs new file mode 100644 index 0000000..ff8f9b9 --- /dev/null +++ b/.history/templates/armor_20241210172459.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210172503.hbs b/.history/templates/armor_20241210172503.hbs new file mode 100644 index 0000000..883ba77 --- /dev/null +++ b/.history/templates/armor_20241210172503.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.iShield value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210172506.hbs b/.history/templates/armor_20241210172506.hbs new file mode 100644 index 0000000..8e8bc39 --- /dev/null +++ b/.history/templates/armor_20241210172506.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isShield value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210172508.hbs b/.history/templates/armor_20241210172508.hbs new file mode 100644 index 0000000..0ef9004 --- /dev/null +++ b/.history/templates/armor_20241210172508.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isShield value=system.isShield}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210172510.hbs b/.history/templates/armor_20241210172510.hbs new file mode 100644 index 0000000..438c745 --- /dev/null +++ b/.history/templates/armor_20241210172510.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isShield value=system.isShield}} + {{formField systemFields.isShield value=system.isShield}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210172514.hbs b/.history/templates/armor_20241210172514.hbs new file mode 100644 index 0000000..75d2d48 --- /dev/null +++ b/.history/templates/armor_20241210172514.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isShield value=system.isShield}} + {{formField systemFields.equipped value=system.isShield}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210172515.hbs b/.history/templates/armor_20241210172515.hbs new file mode 100644 index 0000000..790845e --- /dev/null +++ b/.history/templates/armor_20241210172515.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isShield value=system.isShield}} + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210173347.hbs b/.history/templates/armor_20241210173347.hbs new file mode 100644 index 0000000..790845e --- /dev/null +++ b/.history/templates/armor_20241210173347.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isShield value=system.isShield}} + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210173505.hbs b/.history/templates/armor_20241210173505.hbs new file mode 100644 index 0000000..790845e --- /dev/null +++ b/.history/templates/armor_20241210173505.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isShield value=system.isShield}} + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210173931.hbs b/.history/templates/armor_20241210173931.hbs new file mode 100644 index 0000000..93924bd --- /dev/null +++ b/.history/templates/armor_20241210173931.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isHelmet value=system.isShield}} + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/armor_20241210173933.hbs b/.history/templates/armor_20241210173933.hbs new file mode 100644 index 0000000..ae4daf9 --- /dev/null +++ b/.history/templates/armor_20241210173933.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.armorType value=system.armorType localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.maximumMovement value=system.maximumMovement}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damageReduction value=system.damageReduction}} + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.isHelmet value=system.isHelmet}} + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/character-biography_20241207082848.hbs b/.history/templates/character-biography_20241207082848.hbs new file mode 100644 index 0000000..e8e9b44 --- /dev/null +++ b/.history/templates/character-biography_20241207082848.hbs @@ -0,0 +1,10 @@ +
+
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+
+ {{localize "LETHALFANTASY.Label.notes"}} + {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} +
+
\ No newline at end of file diff --git a/.history/templates/character-biography_20241208154119.hbs b/.history/templates/character-biography_20241208154119.hbs new file mode 100644 index 0000000..e8e9b44 --- /dev/null +++ b/.history/templates/character-biography_20241208154119.hbs @@ -0,0 +1,10 @@ +
+
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+
+ {{localize "LETHALFANTASY.Label.notes"}} + {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} +
+
\ No newline at end of file diff --git a/.history/templates/character-main_20241207223924.hbs b/.history/templates/character-main_20241207223924.hbs new file mode 100644 index 0000000..d687544 --- /dev/null +++ b/.history/templates/character-main_20241207223924.hbs @@ -0,0 +1,110 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205056.hbs b/.history/templates/character-main_20241210205056.hbs new file mode 100644 index 0000000..74b5da2 --- /dev/null +++ b/.history/templates/character-main_20241210205056.hbs @@ -0,0 +1,111 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205104.hbs b/.history/templates/character-main_20241210205104.hbs new file mode 100644 index 0000000..c906dc9 --- /dev/null +++ b/.history/templates/character-main_20241210205104.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205109.hbs b/.history/templates/character-main_20241210205109.hbs new file mode 100644 index 0000000..b15a40b --- /dev/null +++ b/.history/templates/character-main_20241210205109.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205110.hbs b/.history/templates/character-main_20241210205110.hbs new file mode 100644 index 0000000..b15a40b --- /dev/null +++ b/.history/templates/character-main_20241210205110.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205150.hbs b/.history/templates/character-main_20241210205150.hbs new file mode 100644 index 0000000..3daa8ce --- /dev/null +++ b/.history/templates/character-main_20241210205150.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.sa"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205152.hbs b/.history/templates/character-main_20241210205152.hbs new file mode 100644 index 0000000..cc1d882 --- /dev/null +++ b/.history/templates/character-main_20241210205152.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205157.hbs b/.history/templates/character-main_20241210205157.hbs new file mode 100644 index 0000000..021dde9 --- /dev/null +++ b/.history/templates/character-main_20241210205157.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205202.hbs b/.history/templates/character-main_20241210205202.hbs new file mode 100644 index 0000000..4f9e179 --- /dev/null +++ b/.history/templates/character-main_20241210205202.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205230.hbs b/.history/templates/character-main_20241210205230.hbs new file mode 100644 index 0000000..53a1611 --- /dev/null +++ b/.history/templates/character-main_20241210205230.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205232.hbs b/.history/templates/character-main_20241210205232.hbs new file mode 100644 index 0000000..7b03fc7 --- /dev/null +++ b/.history/templates/character-main_20241210205232.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205233.hbs b/.history/templates/character-main_20241210205233.hbs new file mode 100644 index 0000000..7b03fc7 --- /dev/null +++ b/.history/templates/character-main_20241210205233.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205235.hbs b/.history/templates/character-main_20241210205235.hbs new file mode 100644 index 0000000..970acbf --- /dev/null +++ b/.history/templates/character-main_20241210205235.hbs @@ -0,0 +1,118 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205236.hbs b/.history/templates/character-main_20241210205236.hbs new file mode 100644 index 0000000..970acbf --- /dev/null +++ b/.history/templates/character-main_20241210205236.hbs @@ -0,0 +1,118 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205244.hbs b/.history/templates/character-main_20241210205244.hbs new file mode 100644 index 0000000..14fa7ba --- /dev/null +++ b/.history/templates/character-main_20241210205244.hbs @@ -0,0 +1,118 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205245.hbs b/.history/templates/character-main_20241210205245.hbs new file mode 100644 index 0000000..6c48445 --- /dev/null +++ b/.history/templates/character-main_20241210205245.hbs @@ -0,0 +1,118 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205246.hbs b/.history/templates/character-main_20241210205246.hbs new file mode 100644 index 0000000..6c48445 --- /dev/null +++ b/.history/templates/character-main_20241210205246.hbs @@ -0,0 +1,118 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205247.hbs b/.history/templates/character-main_20241210205247.hbs new file mode 100644 index 0000000..3306e76 --- /dev/null +++ b/.history/templates/character-main_20241210205247.hbs @@ -0,0 +1,117 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205249.hbs b/.history/templates/character-main_20241210205249.hbs new file mode 100644 index 0000000..93a768a --- /dev/null +++ b/.history/templates/character-main_20241210205249.hbs @@ -0,0 +1,115 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205250.hbs b/.history/templates/character-main_20241210205250.hbs new file mode 100644 index 0000000..93a768a --- /dev/null +++ b/.history/templates/character-main_20241210205250.hbs @@ -0,0 +1,115 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+ +
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205251.hbs b/.history/templates/character-main_20241210205251.hbs new file mode 100644 index 0000000..3006fa5 --- /dev/null +++ b/.history/templates/character-main_20241210205251.hbs @@ -0,0 +1,114 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.save.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210205444.hbs b/.history/templates/character-main_20241210205444.hbs new file mode 100644 index 0000000..6b4d275 --- /dev/null +++ b/.history/templates/character-main_20241210205444.hbs @@ -0,0 +1,114 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211349.hbs b/.history/templates/character-main_20241210211349.hbs new file mode 100644 index 0000000..fd9b38d --- /dev/null +++ b/.history/templates/character-main_20241210211349.hbs @@ -0,0 +1,114 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211350.hbs b/.history/templates/character-main_20241210211350.hbs new file mode 100644 index 0000000..fd9b38d --- /dev/null +++ b/.history/templates/character-main_20241210211350.hbs @@ -0,0 +1,114 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211351.hbs b/.history/templates/character-main_20241210211351.hbs new file mode 100644 index 0000000..fd9b38d --- /dev/null +++ b/.history/templates/character-main_20241210211351.hbs @@ -0,0 +1,114 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211354.hbs b/.history/templates/character-main_20241210211354.hbs new file mode 100644 index 0000000..b0c2d78 --- /dev/null +++ b/.history/templates/character-main_20241210211354.hbs @@ -0,0 +1,113 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211355.hbs b/.history/templates/character-main_20241210211355.hbs new file mode 100644 index 0000000..b0c2d78 --- /dev/null +++ b/.history/templates/character-main_20241210211355.hbs @@ -0,0 +1,113 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211356.hbs b/.history/templates/character-main_20241210211356.hbs new file mode 100644 index 0000000..b0c2d78 --- /dev/null +++ b/.history/templates/character-main_20241210211356.hbs @@ -0,0 +1,113 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211404.hbs b/.history/templates/character-main_20241210211404.hbs new file mode 100644 index 0000000..72dbf81 --- /dev/null +++ b/.history/templates/character-main_20241210211404.hbs @@ -0,0 +1,114 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211405.hbs b/.history/templates/character-main_20241210211405.hbs new file mode 100644 index 0000000..f9cf0a5 --- /dev/null +++ b/.history/templates/character-main_20241210211405.hbs @@ -0,0 +1,115 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211409.hbs b/.history/templates/character-main_20241210211409.hbs new file mode 100644 index 0000000..2cb4d8a --- /dev/null +++ b/.history/templates/character-main_20241210211409.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211424.hbs b/.history/templates/character-main_20241210211424.hbs new file mode 100644 index 0000000..dcbd70d --- /dev/null +++ b/.history/templates/character-main_20241210211424.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211426.hbs b/.history/templates/character-main_20241210211426.hbs new file mode 100644 index 0000000..d625ae0 --- /dev/null +++ b/.history/templates/character-main_20241210211426.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211427.hbs b/.history/templates/character-main_20241210211427.hbs new file mode 100644 index 0000000..0eab0b8 --- /dev/null +++ b/.history/templates/character-main_20241210211427.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211429.hbs b/.history/templates/character-main_20241210211429.hbs new file mode 100644 index 0000000..e0a6805 --- /dev/null +++ b/.history/templates/character-main_20241210211429.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211456.hbs b/.history/templates/character-main_20241210211456.hbs new file mode 100644 index 0000000..c01edb2 --- /dev/null +++ b/.history/templates/character-main_20241210211456.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211513.hbs b/.history/templates/character-main_20241210211513.hbs new file mode 100644 index 0000000..29c3b2e --- /dev/null +++ b/.history/templates/character-main_20241210211513.hbs @@ -0,0 +1,117 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211515.hbs b/.history/templates/character-main_20241210211515.hbs new file mode 100644 index 0000000..a04af6a --- /dev/null +++ b/.history/templates/character-main_20241210211515.hbs @@ -0,0 +1,119 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211524.hbs b/.history/templates/character-main_20241210211524.hbs new file mode 100644 index 0000000..11629ce --- /dev/null +++ b/.history/templates/character-main_20241210211524.hbs @@ -0,0 +1,121 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211538.hbs b/.history/templates/character-main_20241210211538.hbs new file mode 100644 index 0000000..68d702d --- /dev/null +++ b/.history/templates/character-main_20241210211538.hbs @@ -0,0 +1,121 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.Toughness"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211540.hbs b/.history/templates/character-main_20241210211540.hbs new file mode 100644 index 0000000..12f1d86 --- /dev/null +++ b/.history/templates/character-main_20241210211540.hbs @@ -0,0 +1,121 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.Toughness"}} + {{formField systemFields.saves.fields.Toughness.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211542.hbs b/.history/templates/character-main_20241210211542.hbs new file mode 100644 index 0000000..368831b --- /dev/null +++ b/.history/templates/character-main_20241210211542.hbs @@ -0,0 +1,121 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.Toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211546.hbs b/.history/templates/character-main_20241210211546.hbs new file mode 100644 index 0000000..e01ea9f --- /dev/null +++ b/.history/templates/character-main_20241210211546.hbs @@ -0,0 +1,121 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.Toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211556.hbs b/.history/templates/character-main_20241210211556.hbs new file mode 100644 index 0000000..b13e19f --- /dev/null +++ b/.history/templates/character-main_20241210211556.hbs @@ -0,0 +1,121 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211559.hbs b/.history/templates/character-main_20241210211559.hbs new file mode 100644 index 0000000..ff12d04 --- /dev/null +++ b/.history/templates/character-main_20241210211559.hbs @@ -0,0 +1,123 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211612.hbs b/.history/templates/character-main_20241210211612.hbs new file mode 100644 index 0000000..04fc301 --- /dev/null +++ b/.history/templates/character-main_20241210211612.hbs @@ -0,0 +1,123 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} + {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211614.hbs b/.history/templates/character-main_20241210211614.hbs new file mode 100644 index 0000000..547b490 --- /dev/null +++ b/.history/templates/character-main_20241210211614.hbs @@ -0,0 +1,123 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} + {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} +
+
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211618.hbs b/.history/templates/character-main_20241210211618.hbs new file mode 100644 index 0000000..2b1ebb9 --- /dev/null +++ b/.history/templates/character-main_20241210211618.hbs @@ -0,0 +1,123 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211620.hbs b/.history/templates/character-main_20241210211620.hbs new file mode 100644 index 0000000..e9f49b4 --- /dev/null +++ b/.history/templates/character-main_20241210211620.hbs @@ -0,0 +1,125 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211628.hbs b/.history/templates/character-main_20241210211628.hbs new file mode 100644 index 0000000..b889536 --- /dev/null +++ b/.history/templates/character-main_20241210211628.hbs @@ -0,0 +1,125 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211629.hbs b/.history/templates/character-main_20241210211629.hbs new file mode 100644 index 0000000..9f37971 --- /dev/null +++ b/.history/templates/character-main_20241210211629.hbs @@ -0,0 +1,125 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211630.hbs b/.history/templates/character-main_20241210211630.hbs new file mode 100644 index 0000000..4b04903 --- /dev/null +++ b/.history/templates/character-main_20241210211630.hbs @@ -0,0 +1,125 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211631.hbs b/.history/templates/character-main_20241210211631.hbs new file mode 100644 index 0000000..54f0361 --- /dev/null +++ b/.history/templates/character-main_20241210211631.hbs @@ -0,0 +1,127 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211639.hbs b/.history/templates/character-main_20241210211639.hbs new file mode 100644 index 0000000..c8db3fa --- /dev/null +++ b/.history/templates/character-main_20241210211639.hbs @@ -0,0 +1,127 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211640.hbs b/.history/templates/character-main_20241210211640.hbs new file mode 100644 index 0000000..8161f88 --- /dev/null +++ b/.history/templates/character-main_20241210211640.hbs @@ -0,0 +1,127 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211641.hbs b/.history/templates/character-main_20241210211641.hbs new file mode 100644 index 0000000..ee10319 --- /dev/null +++ b/.history/templates/character-main_20241210211641.hbs @@ -0,0 +1,127 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211642.hbs b/.history/templates/character-main_20241210211642.hbs new file mode 100644 index 0000000..b4ae868 --- /dev/null +++ b/.history/templates/character-main_20241210211642.hbs @@ -0,0 +1,127 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode classes="rollable" data-save-id="pain" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211723.hbs b/.history/templates/character-main_20241210211723.hbs new file mode 100644 index 0000000..79a95d9 --- /dev/null +++ b/.history/templates/character-main_20241210211723.hbs @@ -0,0 +1,128 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode classes="rollable" data-save-id="pain" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211726.hbs b/.history/templates/character-main_20241210211726.hbs new file mode 100644 index 0000000..e3148d4 --- /dev/null +++ b/.history/templates/character-main_20241210211726.hbs @@ -0,0 +1,129 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode classes="rollable" data-save-id="pain" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211727.hbs b/.history/templates/character-main_20241210211727.hbs new file mode 100644 index 0000000..a8ebacd --- /dev/null +++ b/.history/templates/character-main_20241210211727.hbs @@ -0,0 +1,129 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode classes="rollable" data-save-id="pain" }} +
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211732.hbs b/.history/templates/character-main_20241210211732.hbs new file mode 100644 index 0000000..07fe51f --- /dev/null +++ b/.history/templates/character-main_20241210211732.hbs @@ -0,0 +1,130 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode classes="rollable" data-save-id="pain" }} +
+
+ + +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211733.hbs b/.history/templates/character-main_20241210211733.hbs new file mode 100644 index 0000000..a936eb8 --- /dev/null +++ b/.history/templates/character-main_20241210211733.hbs @@ -0,0 +1,130 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211734.hbs b/.history/templates/character-main_20241210211734.hbs new file mode 100644 index 0000000..255cb7d --- /dev/null +++ b/.history/templates/character-main_20241210211734.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211746.hbs b/.history/templates/character-main_20241210211746.hbs new file mode 100644 index 0000000..7bfcd04 --- /dev/null +++ b/.history/templates/character-main_20241210211746.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211837.hbs b/.history/templates/character-main_20241210211837.hbs new file mode 100644 index 0000000..3fcf9dc --- /dev/null +++ b/.history/templates/character-main_20241210211837.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211838.hbs b/.history/templates/character-main_20241210211838.hbs new file mode 100644 index 0000000..5e9d728 --- /dev/null +++ b/.history/templates/character-main_20241210211838.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211847.hbs b/.history/templates/character-main_20241210211847.hbs new file mode 100644 index 0000000..1e7a6c6 --- /dev/null +++ b/.history/templates/character-main_20241210211847.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210211856.hbs b/.history/templates/character-main_20241210211856.hbs new file mode 100644 index 0000000..1e7a6c6 --- /dev/null +++ b/.history/templates/character-main_20241210211856.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212330.hbs b/.history/templates/character-main_20241210212330.hbs new file mode 100644 index 0000000..2096d9c --- /dev/null +++ b/.history/templates/character-main_20241210212330.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212332.hbs b/.history/templates/character-main_20241210212332.hbs new file mode 100644 index 0000000..a6cf462 --- /dev/null +++ b/.history/templates/character-main_20241210212332.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212335.hbs b/.history/templates/character-main_20241210212335.hbs new file mode 100644 index 0000000..3989054 --- /dev/null +++ b/.history/templates/character-main_20241210212335.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212338.hbs b/.history/templates/character-main_20241210212338.hbs new file mode 100644 index 0000000..095c34c --- /dev/null +++ b/.history/templates/character-main_20241210212338.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212340.hbs b/.history/templates/character-main_20241210212340.hbs new file mode 100644 index 0000000..49c81ff --- /dev/null +++ b/.history/templates/character-main_20241210212340.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212511.hbs b/.history/templates/character-main_20241210212511.hbs new file mode 100644 index 0000000..3713e52 --- /dev/null +++ b/.history/templates/character-main_20241210212511.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212515.hbs b/.history/templates/character-main_20241210212515.hbs new file mode 100644 index 0000000..b66b4e6 --- /dev/null +++ b/.history/templates/character-main_20241210212515.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212531.hbs b/.history/templates/character-main_20241210212531.hbs new file mode 100644 index 0000000..edb568a --- /dev/null +++ b/.history/templates/character-main_20241210212531.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212533.hbs b/.history/templates/character-main_20241210212533.hbs new file mode 100644 index 0000000..dfc8f20 --- /dev/null +++ b/.history/templates/character-main_20241210212533.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212541.hbs b/.history/templates/character-main_20241210212541.hbs new file mode 100644 index 0000000..8722cb3 --- /dev/null +++ b/.history/templates/character-main_20241210212541.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212543.hbs b/.history/templates/character-main_20241210212543.hbs new file mode 100644 index 0000000..0123f5f --- /dev/null +++ b/.history/templates/character-main_20241210212543.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212548.hbs b/.history/templates/character-main_20241210212548.hbs new file mode 100644 index 0000000..93663f2 --- /dev/null +++ b/.history/templates/character-main_20241210212548.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212551.hbs b/.history/templates/character-main_20241210212551.hbs new file mode 100644 index 0000000..570594d --- /dev/null +++ b/.history/templates/character-main_20241210212551.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212552.hbs b/.history/templates/character-main_20241210212552.hbs new file mode 100644 index 0000000..93663f2 --- /dev/null +++ b/.history/templates/character-main_20241210212552.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212554.hbs b/.history/templates/character-main_20241210212554.hbs new file mode 100644 index 0000000..19c95c5 --- /dev/null +++ b/.history/templates/character-main_20241210212554.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212556.hbs b/.history/templates/character-main_20241210212556.hbs new file mode 100644 index 0000000..5cf29ff --- /dev/null +++ b/.history/templates/character-main_20241210212556.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212559.hbs b/.history/templates/character-main_20241210212559.hbs new file mode 100644 index 0000000..1436b59 --- /dev/null +++ b/.history/templates/character-main_20241210212559.hbs @@ -0,0 +1,136 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212723.hbs b/.history/templates/character-main_20241210212723.hbs new file mode 100644 index 0000000..e12397e --- /dev/null +++ b/.history/templates/character-main_20241210212723.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212728.hbs b/.history/templates/character-main_20241210212728.hbs new file mode 100644 index 0000000..1d3f356 --- /dev/null +++ b/.history/templates/character-main_20241210212728.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212732.hbs b/.history/templates/character-main_20241210212732.hbs new file mode 100644 index 0000000..c03078c --- /dev/null +++ b/.history/templates/character-main_20241210212732.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212734.hbs b/.history/templates/character-main_20241210212734.hbs new file mode 100644 index 0000000..47adde4 --- /dev/null +++ b/.history/templates/character-main_20241210212734.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212738.hbs b/.history/templates/character-main_20241210212738.hbs new file mode 100644 index 0000000..441a278 --- /dev/null +++ b/.history/templates/character-main_20241210212738.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212741.hbs b/.history/templates/character-main_20241210212741.hbs new file mode 100644 index 0000000..f8fec30 --- /dev/null +++ b/.history/templates/character-main_20241210212741.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212754.hbs b/.history/templates/character-main_20241210212754.hbs new file mode 100644 index 0000000..854e2f6 --- /dev/null +++ b/.history/templates/character-main_20241210212754.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212755.hbs b/.history/templates/character-main_20241210212755.hbs new file mode 100644 index 0000000..a2cb872 --- /dev/null +++ b/.history/templates/character-main_20241210212755.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212758.hbs b/.history/templates/character-main_20241210212758.hbs new file mode 100644 index 0000000..d84fb5b --- /dev/null +++ b/.history/templates/character-main_20241210212758.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212805.hbs b/.history/templates/character-main_20241210212805.hbs new file mode 100644 index 0000000..a97048d --- /dev/null +++ b/.history/templates/character-main_20241210212805.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212809.hbs b/.history/templates/character-main_20241210212809.hbs new file mode 100644 index 0000000..35c1934 --- /dev/null +++ b/.history/templates/character-main_20241210212809.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212815.hbs b/.history/templates/character-main_20241210212815.hbs new file mode 100644 index 0000000..cc0e932 --- /dev/null +++ b/.history/templates/character-main_20241210212815.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212819.hbs b/.history/templates/character-main_20241210212819.hbs new file mode 100644 index 0000000..94dfaf4 --- /dev/null +++ b/.history/templates/character-main_20241210212819.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212821.hbs b/.history/templates/character-main_20241210212821.hbs new file mode 100644 index 0000000..334a9ca --- /dev/null +++ b/.history/templates/character-main_20241210212821.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212824.hbs b/.history/templates/character-main_20241210212824.hbs new file mode 100644 index 0000000..0dfe49d --- /dev/null +++ b/.history/templates/character-main_20241210212824.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212826.hbs b/.history/templates/character-main_20241210212826.hbs new file mode 100644 index 0000000..520a839 --- /dev/null +++ b/.history/templates/character-main_20241210212826.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212828.hbs b/.history/templates/character-main_20241210212828.hbs new file mode 100644 index 0000000..aea9f52 --- /dev/null +++ b/.history/templates/character-main_20241210212828.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212829.hbs b/.history/templates/character-main_20241210212829.hbs new file mode 100644 index 0000000..380250a --- /dev/null +++ b/.history/templates/character-main_20241210212829.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.save.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212832.hbs b/.history/templates/character-main_20241210212832.hbs new file mode 100644 index 0000000..d30c4d3 --- /dev/null +++ b/.history/templates/character-main_20241210212832.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.save.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.save.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212835.hbs b/.history/templates/character-main_20241210212835.hbs new file mode 100644 index 0000000..f67acb4 --- /dev/null +++ b/.history/templates/character-main_20241210212835.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.save.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.save.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.save.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212844.hbs b/.history/templates/character-main_20241210212844.hbs new file mode 100644 index 0000000..6957007 --- /dev/null +++ b/.history/templates/character-main_20241210212844.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.save.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.save.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212846.hbs b/.history/templates/character-main_20241210212846.hbs new file mode 100644 index 0000000..6250cb6 --- /dev/null +++ b/.history/templates/character-main_20241210212846.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.save.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212847.hbs b/.history/templates/character-main_20241210212847.hbs new file mode 100644 index 0000000..e04a647 --- /dev/null +++ b/.history/templates/character-main_20241210212847.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.save.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212850.hbs b/.history/templates/character-main_20241210212850.hbs new file mode 100644 index 0000000..4c3efca --- /dev/null +++ b/.history/templates/character-main_20241210212850.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.save.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212851.hbs b/.history/templates/character-main_20241210212851.hbs new file mode 100644 index 0000000..1f0c743 --- /dev/null +++ b/.history/templates/character-main_20241210212851.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saved.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212852.hbs b/.history/templates/character-main_20241210212852.hbs new file mode 100644 index 0000000..b04f50c --- /dev/null +++ b/.history/templates/character-main_20241210212852.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.save.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212853.hbs b/.history/templates/character-main_20241210212853.hbs new file mode 100644 index 0000000..8138b36 --- /dev/null +++ b/.history/templates/character-main_20241210212853.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212854.hbs b/.history/templates/character-main_20241210212854.hbs new file mode 100644 index 0000000..8138b36 --- /dev/null +++ b/.history/templates/character-main_20241210212854.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212855.hbs b/.history/templates/character-main_20241210212855.hbs new file mode 100644 index 0000000..8138b36 --- /dev/null +++ b/.history/templates/character-main_20241210212855.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212926.hbs b/.history/templates/character-main_20241210212926.hbs new file mode 100644 index 0000000..8138b36 --- /dev/null +++ b/.history/templates/character-main_20241210212926.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.save.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212948.hbs b/.history/templates/character-main_20241210212948.hbs new file mode 100644 index 0000000..2237c24 --- /dev/null +++ b/.history/templates/character-main_20241210212948.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.save.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212949.hbs b/.history/templates/character-main_20241210212949.hbs new file mode 100644 index 0000000..78b2904 --- /dev/null +++ b/.history/templates/character-main_20241210212949.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.save.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212950.hbs b/.history/templates/character-main_20241210212950.hbs new file mode 100644 index 0000000..fb2c01d --- /dev/null +++ b/.history/templates/character-main_20241210212950.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210212951.hbs b/.history/templates/character-main_20241210212951.hbs new file mode 100644 index 0000000..fb2c01d --- /dev/null +++ b/.history/templates/character-main_20241210212951.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225237.hbs b/.history/templates/character-main_20241210225237.hbs new file mode 100644 index 0000000..fb2c01d --- /dev/null +++ b/.history/templates/character-main_20241210225237.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225301.hbs b/.history/templates/character-main_20241210225301.hbs new file mode 100644 index 0000000..e01756c --- /dev/null +++ b/.history/templates/character-main_20241210225301.hbs @@ -0,0 +1,137 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ + +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225313.hbs b/.history/templates/character-main_20241210225313.hbs new file mode 100644 index 0000000..fb2c01d --- /dev/null +++ b/.history/templates/character-main_20241210225313.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225445.hbs b/.history/templates/character-main_20241210225445.hbs new file mode 100644 index 0000000..fb2c01d --- /dev/null +++ b/.history/templates/character-main_20241210225445.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225513.hbs b/.history/templates/character-main_20241210225513.hbs new file mode 100644 index 0000000..fb2c01d --- /dev/null +++ b/.history/templates/character-main_20241210225513.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225626.hbs b/.history/templates/character-main_20241210225626.hbs new file mode 100644 index 0000000..93037bb --- /dev/null +++ b/.history/templates/character-main_20241210225626.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="will" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225631.hbs b/.history/templates/character-main_20241210225631.hbs new file mode 100644 index 0000000..98287e6 --- /dev/null +++ b/.history/templates/character-main_20241210225631.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="strength" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225633.hbs b/.history/templates/character-main_20241210225633.hbs new file mode 100644 index 0000000..c5d3d6d --- /dev/null +++ b/.history/templates/character-main_20241210225633.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="strength" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="dodge" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225635.hbs b/.history/templates/character-main_20241210225635.hbs new file mode 100644 index 0000000..ea4a059 --- /dev/null +++ b/.history/templates/character-main_20241210225635.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="strength" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225639.hbs b/.history/templates/character-main_20241210225639.hbs new file mode 100644 index 0000000..60b7340 --- /dev/null +++ b/.history/templates/character-main_20241210225639.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="strength" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-save-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225642.hbs b/.history/templates/character-main_20241210225642.hbs new file mode 100644 index 0000000..0057ffe --- /dev/null +++ b/.history/templates/character-main_20241210225642.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="strength" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225643.hbs b/.history/templates/character-main_20241210225643.hbs new file mode 100644 index 0000000..0057ffe --- /dev/null +++ b/.history/templates/character-main_20241210225643.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="strength" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225700.hbs b/.history/templates/character-main_20241210225700.hbs new file mode 100644 index 0000000..0057ffe --- /dev/null +++ b/.history/templates/character-main_20241210225700.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.strength.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="strength" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225725.hbs b/.history/templates/character-main_20241210225725.hbs new file mode 100644 index 0000000..63a59e0 --- /dev/null +++ b/.history/templates/character-main_20241210225725.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.strength.value disabled=isPlayMode + classes="rollable" data-challenge-id="strength" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225728.hbs b/.history/templates/character-main_20241210225728.hbs new file mode 100644 index 0000000..0fd0b7b --- /dev/null +++ b/.history/templates/character-main_20241210225728.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225730.hbs b/.history/templates/character-main_20241210225730.hbs new file mode 100644 index 0000000..0fd0b7b --- /dev/null +++ b/.history/templates/character-main_20241210225730.hbs @@ -0,0 +1,153 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225939.hbs b/.history/templates/character-main_20241210225939.hbs new file mode 100644 index 0000000..8ec388a --- /dev/null +++ b/.history/templates/character-main_20241210225939.hbs @@ -0,0 +1,155 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225941.hbs b/.history/templates/character-main_20241210225941.hbs new file mode 100644 index 0000000..a20b7f1 --- /dev/null +++ b/.history/templates/character-main_20241210225941.hbs @@ -0,0 +1,156 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225942.hbs b/.history/templates/character-main_20241210225942.hbs new file mode 100644 index 0000000..f6505bb --- /dev/null +++ b/.history/templates/character-main_20241210225942.hbs @@ -0,0 +1,155 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225944.hbs b/.history/templates/character-main_20241210225944.hbs new file mode 100644 index 0000000..ac09a40 --- /dev/null +++ b/.history/templates/character-main_20241210225944.hbs @@ -0,0 +1,155 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225947.hbs b/.history/templates/character-main_20241210225947.hbs new file mode 100644 index 0000000..465d646 --- /dev/null +++ b/.history/templates/character-main_20241210225947.hbs @@ -0,0 +1,156 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225948.hbs b/.history/templates/character-main_20241210225948.hbs new file mode 100644 index 0000000..8a43b25 --- /dev/null +++ b/.history/templates/character-main_20241210225948.hbs @@ -0,0 +1,157 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210225951.hbs b/.history/templates/character-main_20241210225951.hbs new file mode 100644 index 0000000..8a43b25 --- /dev/null +++ b/.history/templates/character-main_20241210225951.hbs @@ -0,0 +1,157 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230000.hbs b/.history/templates/character-main_20241210230000.hbs new file mode 100644 index 0000000..0f4c823 --- /dev/null +++ b/.history/templates/character-main_20241210230000.hbs @@ -0,0 +1,158 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230003.hbs b/.history/templates/character-main_20241210230003.hbs new file mode 100644 index 0000000..7244080 --- /dev/null +++ b/.history/templates/character-main_20241210230003.hbs @@ -0,0 +1,158 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230004.hbs b/.history/templates/character-main_20241210230004.hbs new file mode 100644 index 0000000..7244080 --- /dev/null +++ b/.history/templates/character-main_20241210230004.hbs @@ -0,0 +1,158 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230047.hbs b/.history/templates/character-main_20241210230047.hbs new file mode 100644 index 0000000..7244080 --- /dev/null +++ b/.history/templates/character-main_20241210230047.hbs @@ -0,0 +1,158 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230052.hbs b/.history/templates/character-main_20241210230052.hbs new file mode 100644 index 0000000..9579f73 --- /dev/null +++ b/.history/templates/character-main_20241210230052.hbs @@ -0,0 +1,159 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+ < +
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230055.hbs b/.history/templates/character-main_20241210230055.hbs new file mode 100644 index 0000000..9de6eb3 --- /dev/null +++ b/.history/templates/character-main_20241210230055.hbs @@ -0,0 +1,161 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230059.hbs b/.history/templates/character-main_20241210230059.hbs new file mode 100644 index 0000000..5218f3c --- /dev/null +++ b/.history/templates/character-main_20241210230059.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} + +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230104.hbs b/.history/templates/character-main_20241210230104.hbs new file mode 100644 index 0000000..f6ec391 --- /dev/null +++ b/.history/templates/character-main_20241210230104.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} + +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230108.hbs b/.history/templates/character-main_20241210230108.hbs new file mode 100644 index 0000000..49cc68b --- /dev/null +++ b/.history/templates/character-main_20241210230108.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230109.hbs b/.history/templates/character-main_20241210230109.hbs new file mode 100644 index 0000000..49cc68b --- /dev/null +++ b/.history/templates/character-main_20241210230109.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230114.hbs b/.history/templates/character-main_20241210230114.hbs new file mode 100644 index 0000000..648fc09 --- /dev/null +++ b/.history/templates/character-main_20241210230114.hbs @@ -0,0 +1,163 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230117.hbs b/.history/templates/character-main_20241210230117.hbs new file mode 100644 index 0000000..06f3ae1 --- /dev/null +++ b/.history/templates/character-main_20241210230117.hbs @@ -0,0 +1,163 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.bonus value=system.perception.value disabled=isPlayMode classes="character-hp"}} + +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230118.hbs b/.history/templates/character-main_20241210230118.hbs new file mode 100644 index 0000000..43388ef --- /dev/null +++ b/.history/templates/character-main_20241210230118.hbs @@ -0,0 +1,163 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} + +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230119.hbs b/.history/templates/character-main_20241210230119.hbs new file mode 100644 index 0000000..35c0e64 --- /dev/null +++ b/.history/templates/character-main_20241210230119.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230132.hbs b/.history/templates/character-main_20241210230132.hbs new file mode 100644 index 0000000..35c0e64 --- /dev/null +++ b/.history/templates/character-main_20241210230132.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230150.hbs b/.history/templates/character-main_20241210230150.hbs new file mode 100644 index 0000000..6dd6e49 --- /dev/null +++ b/.history/templates/character-main_20241210230150.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230151.hbs b/.history/templates/character-main_20241210230151.hbs new file mode 100644 index 0000000..1e6580a --- /dev/null +++ b/.history/templates/character-main_20241210230151.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230206.hbs b/.history/templates/character-main_20241210230206.hbs new file mode 100644 index 0000000..3aa740f --- /dev/null +++ b/.history/templates/character-main_20241210230206.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230207.hbs b/.history/templates/character-main_20241210230207.hbs new file mode 100644 index 0000000..3aa740f --- /dev/null +++ b/.history/templates/character-main_20241210230207.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230208.hbs b/.history/templates/character-main_20241210230208.hbs new file mode 100644 index 0000000..3aa740f --- /dev/null +++ b/.history/templates/character-main_20241210230208.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230209.hbs b/.history/templates/character-main_20241210230209.hbs new file mode 100644 index 0000000..3aa740f --- /dev/null +++ b/.history/templates/character-main_20241210230209.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230217.hbs b/.history/templates/character-main_20241210230217.hbs new file mode 100644 index 0000000..6b37c96 --- /dev/null +++ b/.history/templates/character-main_20241210230217.hbs @@ -0,0 +1,162 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{formField systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230424.hbs b/.history/templates/character-main_20241210230424.hbs new file mode 100644 index 0000000..85e175b --- /dev/null +++ b/.history/templates/character-main_20241210230424.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + + {{formField systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230427.hbs b/.history/templates/character-main_20241210230427.hbs new file mode 100644 index 0000000..a68ac54 --- /dev/null +++ b/.history/templates/character-main_20241210230427.hbs @@ -0,0 +1,163 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230442.hbs b/.history/templates/character-main_20241210230442.hbs new file mode 100644 index 0000000..bb95b3e --- /dev/null +++ b/.history/templates/character-main_20241210230442.hbs @@ -0,0 +1,163 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.P.saves.will"}} + {{formField systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230447.hbs b/.history/templates/character-main_20241210230447.hbs new file mode 100644 index 0000000..f4689c6 --- /dev/null +++ b/.history/templates/character-main_20241210230447.hbs @@ -0,0 +1,163 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formField systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230450.hbs b/.history/templates/character-main_20241210230450.hbs new file mode 100644 index 0000000..6dc0f94 --- /dev/null +++ b/.history/templates/character-main_20241210230450.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formField systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.perception"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230452.hbs b/.history/templates/character-main_20241210230452.hbs new file mode 100644 index 0000000..5091799 --- /dev/null +++ b/.history/templates/character-main_20241210230452.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formField systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230453.hbs b/.history/templates/character-main_20241210230453.hbs new file mode 100644 index 0000000..5091799 --- /dev/null +++ b/.history/templates/character-main_20241210230453.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formField systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230535.hbs b/.history/templates/character-main_20241210230535.hbs new file mode 100644 index 0000000..01e531b --- /dev/null +++ b/.history/templates/character-main_20241210230535.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formField systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230539.hbs b/.history/templates/character-main_20241210230539.hbs new file mode 100644 index 0000000..d143670 --- /dev/null +++ b/.history/templates/character-main_20241210230539.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+ {{localize "LETHALFANTASY.Label.HP"}} +
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230605.hbs b/.history/templates/character-main_20241210230605.hbs new file mode 100644 index 0000000..7bb8bdb --- /dev/null +++ b/.history/templates/character-main_20241210230605.hbs @@ -0,0 +1,163 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230613.hbs b/.history/templates/character-main_20241210230613.hbs new file mode 100644 index 0000000..d8546d5 --- /dev/null +++ b/.history/templates/character-main_20241210230613.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230616.hbs b/.history/templates/character-main_20241210230616.hbs new file mode 100644 index 0000000..868a1ee --- /dev/null +++ b/.history/templates/character-main_20241210230616.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230618.hbs b/.history/templates/character-main_20241210230618.hbs new file mode 100644 index 0000000..868a1ee --- /dev/null +++ b/.history/templates/character-main_20241210230618.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230622.hbs b/.history/templates/character-main_20241210230622.hbs new file mode 100644 index 0000000..868a1ee --- /dev/null +++ b/.history/templates/character-main_20241210230622.hbs @@ -0,0 +1,164 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230632.hbs b/.history/templates/character-main_20241210230632.hbs new file mode 100644 index 0000000..c19a1ca --- /dev/null +++ b/.history/templates/character-main_20241210230632.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230637.hbs b/.history/templates/character-main_20241210230637.hbs new file mode 100644 index 0000000..d3c9b60 --- /dev/null +++ b/.history/templates/character-main_20241210230637.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230640.hbs b/.history/templates/character-main_20241210230640.hbs new file mode 100644 index 0000000..46b778b --- /dev/null +++ b/.history/templates/character-main_20241210230640.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230645.hbs b/.history/templates/character-main_20241210230645.hbs new file mode 100644 index 0000000..0ba54b1 --- /dev/null +++ b/.history/templates/character-main_20241210230645.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230647.hbs b/.history/templates/character-main_20241210230647.hbs new file mode 100644 index 0000000..3ff5f6e --- /dev/null +++ b/.history/templates/character-main_20241210230647.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.value value=system.grit.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230651.hbs b/.history/templates/character-main_20241210230651.hbs new file mode 100644 index 0000000..3d2cad6 --- /dev/null +++ b/.history/templates/character-main_20241210230651.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.value value=system.grit.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.perception.fields.bonus value=system.grit.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230652.hbs b/.history/templates/character-main_20241210230652.hbs new file mode 100644 index 0000000..36ce637 --- /dev/null +++ b/.history/templates/character-main_20241210230652.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.value value=system.grit.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.bonus value=system.grit.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230655.hbs b/.history/templates/character-main_20241210230655.hbs new file mode 100644 index 0000000..f5a136d --- /dev/null +++ b/.history/templates/character-main_20241210230655.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.value value=system.grit.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230656.hbs b/.history/templates/character-main_20241210230656.hbs new file mode 100644 index 0000000..3c97d3c --- /dev/null +++ b/.history/templates/character-main_20241210230656.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.value value=system.grit.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230712.hbs b/.history/templates/character-main_20241210230712.hbs new file mode 100644 index 0000000..a6f5643 --- /dev/null +++ b/.history/templates/character-main_20241210230712.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230713.hbs b/.history/templates/character-main_20241210230713.hbs new file mode 100644 index 0000000..236759e --- /dev/null +++ b/.history/templates/character-main_20241210230713.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230715.hbs b/.history/templates/character-main_20241210230715.hbs new file mode 100644 index 0000000..236759e --- /dev/null +++ b/.history/templates/character-main_20241210230715.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230722.hbs b/.history/templates/character-main_20241210230722.hbs new file mode 100644 index 0000000..236759e --- /dev/null +++ b/.history/templates/character-main_20241210230722.hbs @@ -0,0 +1,170 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230812.hbs b/.history/templates/character-main_20241210230812.hbs new file mode 100644 index 0000000..3878d73 --- /dev/null +++ b/.history/templates/character-main_20241210230812.hbs @@ -0,0 +1,176 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230817.hbs b/.history/templates/character-main_20241210230817.hbs new file mode 100644 index 0000000..833beb2 --- /dev/null +++ b/.history/templates/character-main_20241210230817.hbs @@ -0,0 +1,176 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230821.hbs b/.history/templates/character-main_20241210230821.hbs new file mode 100644 index 0000000..1550746 --- /dev/null +++ b/.history/templates/character-main_20241210230821.hbs @@ -0,0 +1,176 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230827.hbs b/.history/templates/character-main_20241210230827.hbs new file mode 100644 index 0000000..6615ef9 --- /dev/null +++ b/.history/templates/character-main_20241210230827.hbs @@ -0,0 +1,176 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210230830.hbs b/.history/templates/character-main_20241210230830.hbs new file mode 100644 index 0000000..984e053 --- /dev/null +++ b/.history/templates/character-main_20241210230830.hbs @@ -0,0 +1,176 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231056.hbs b/.history/templates/character-main_20241210231056.hbs new file mode 100644 index 0000000..32805be --- /dev/null +++ b/.history/templates/character-main_20241210231056.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231101.hbs b/.history/templates/character-main_20241210231101.hbs new file mode 100644 index 0000000..69fe7c7 --- /dev/null +++ b/.history/templates/character-main_20241210231101.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231106.hbs b/.history/templates/character-main_20241210231106.hbs new file mode 100644 index 0000000..76de1d8 --- /dev/null +++ b/.history/templates/character-main_20241210231106.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231109.hbs b/.history/templates/character-main_20241210231109.hbs new file mode 100644 index 0000000..36e32e3 --- /dev/null +++ b/.history/templates/character-main_20241210231109.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231125.hbs b/.history/templates/character-main_20241210231125.hbs new file mode 100644 index 0000000..4ab4bf0 --- /dev/null +++ b/.history/templates/character-main_20241210231125.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231127.hbs b/.history/templates/character-main_20241210231127.hbs new file mode 100644 index 0000000..b5c01cb --- /dev/null +++ b/.history/templates/character-main_20241210231127.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231132.hbs b/.history/templates/character-main_20241210231132.hbs new file mode 100644 index 0000000..3b4d177 --- /dev/null +++ b/.history/templates/character-main_20241210231132.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231135.hbs b/.history/templates/character-main_20241210231135.hbs new file mode 100644 index 0000000..3b4d177 --- /dev/null +++ b/.history/templates/character-main_20241210231135.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231139.hbs b/.history/templates/character-main_20241210231139.hbs new file mode 100644 index 0000000..fce6fdd --- /dev/null +++ b/.history/templates/character-main_20241210231139.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231143.hbs b/.history/templates/character-main_20241210231143.hbs new file mode 100644 index 0000000..fe6c45d --- /dev/null +++ b/.history/templates/character-main_20241210231143.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231144.hbs b/.history/templates/character-main_20241210231144.hbs new file mode 100644 index 0000000..fe6c45d --- /dev/null +++ b/.history/templates/character-main_20241210231144.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231151.hbs b/.history/templates/character-main_20241210231151.hbs new file mode 100644 index 0000000..f6babf9 --- /dev/null +++ b/.history/templates/character-main_20241210231151.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231203.hbs b/.history/templates/character-main_20241210231203.hbs new file mode 100644 index 0000000..3d99822 --- /dev/null +++ b/.history/templates/character-main_20241210231203.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231208.hbs b/.history/templates/character-main_20241210231208.hbs new file mode 100644 index 0000000..d5237a0 --- /dev/null +++ b/.history/templates/character-main_20241210231208.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.agility.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231209.hbs b/.history/templates/character-main_20241210231209.hbs new file mode 100644 index 0000000..7eaaa8f --- /dev/null +++ b/.history/templates/character-main_20241210231209.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231219.hbs b/.history/templates/character-main_20241210231219.hbs new file mode 100644 index 0000000..545a6b7 --- /dev/null +++ b/.history/templates/character-main_20241210231219.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.sprint value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231222.hbs b/.history/templates/character-main_20241210231222.hbs new file mode 100644 index 0000000..8409e22 --- /dev/null +++ b/.history/templates/character-main_20241210231222.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.sprint value=system.challenges.sprint.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231223.hbs b/.history/templates/character-main_20241210231223.hbs new file mode 100644 index 0000000..342b57f --- /dev/null +++ b/.history/templates/character-main_20241210231223.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.sprint value=system.challenges.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231225.hbs b/.history/templates/character-main_20241210231225.hbs new file mode 100644 index 0000000..0a316d6 --- /dev/null +++ b/.history/templates/character-main_20241210231225.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231233.hbs b/.history/templates/character-main_20241210231233.hbs new file mode 100644 index 0000000..3f235a6 --- /dev/null +++ b/.history/templates/character-main_20241210231233.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.Movement.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231235.hbs b/.history/templates/character-main_20241210231235.hbs new file mode 100644 index 0000000..9f512fe --- /dev/null +++ b/.history/templates/character-main_20241210231235.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231240.hbs b/.history/templates/character-main_20241210231240.hbs new file mode 100644 index 0000000..bd36be7 --- /dev/null +++ b/.history/templates/character-main_20241210231240.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.strength"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.movement.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.movement.dying"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231243.hbs b/.history/templates/character-main_20241210231243.hbs new file mode 100644 index 0000000..31ac6f8 --- /dev/null +++ b/.history/templates/character-main_20241210231243.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.movement.agility"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.movement.dying"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231245.hbs b/.history/templates/character-main_20241210231245.hbs new file mode 100644 index 0000000..7e74a17 --- /dev/null +++ b/.history/templates/character-main_20241210231245.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.movement.dying"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231246.hbs b/.history/templates/character-main_20241210231246.hbs new file mode 100644 index 0000000..a20ba38 --- /dev/null +++ b/.history/templates/character-main_20241210231246.hbs @@ -0,0 +1,193 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231253.hbs b/.history/templates/character-main_20241210231253.hbs new file mode 100644 index 0000000..6084f53 --- /dev/null +++ b/.history/templates/character-main_20241210231253.hbs @@ -0,0 +1,192 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231257.hbs b/.history/templates/character-main_20241210231257.hbs new file mode 100644 index 0000000..657eda9 --- /dev/null +++ b/.history/templates/character-main_20241210231257.hbs @@ -0,0 +1,191 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231300.hbs b/.history/templates/character-main_20241210231300.hbs new file mode 100644 index 0000000..228875c --- /dev/null +++ b/.history/templates/character-main_20241210231300.hbs @@ -0,0 +1,190 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint}} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231301.hbs b/.history/templates/character-main_20241210231301.hbs new file mode 100644 index 0000000..228875c --- /dev/null +++ b/.history/templates/character-main_20241210231301.hbs @@ -0,0 +1,190 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint}} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231415.hbs b/.history/templates/character-main_20241210231415.hbs new file mode 100644 index 0000000..48b18e8 --- /dev/null +++ b/.history/templates/character-main_20241210231415.hbs @@ -0,0 +1,192 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint}} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231418.hbs b/.history/templates/character-main_20241210231418.hbs new file mode 100644 index 0000000..c7a37d2 --- /dev/null +++ b/.history/templates/character-main_20241210231418.hbs @@ -0,0 +1,192 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint}} + {{localize "LETHALFANTASY.Label.movement.run"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint}} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231422.hbs b/.history/templates/character-main_20241210231422.hbs new file mode 100644 index 0000000..2576cf6 --- /dev/null +++ b/.history/templates/character-main_20241210231422.hbs @@ -0,0 +1,192 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint}} + {{localize "LETHALFANTASY.Label.movement.run"}} + {{formField systemFields.movement.fields.run value=system.movement.run}} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231428.hbs b/.history/templates/character-main_20241210231428.hbs new file mode 100644 index 0000000..2576cf6 --- /dev/null +++ b/.history/templates/character-main_20241210231428.hbs @@ -0,0 +1,192 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint}} + {{localize "LETHALFANTASY.Label.movement.run"}} + {{formField systemFields.movement.fields.run value=system.movement.run}} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231441.hbs b/.history/templates/character-main_20241210231441.hbs new file mode 100644 index 0000000..c221fd1 --- /dev/null +++ b/.history/templates/character-main_20241210231441.hbs @@ -0,0 +1,192 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.run"}} + {{formField systemFields.movement.fields.run value=system.movement.run}} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-main_20241210231442.hbs b/.history/templates/character-main_20241210231442.hbs new file mode 100644 index 0000000..0d87491 --- /dev/null +++ b/.history/templates/character-main_20241210231442.hbs @@ -0,0 +1,192 @@ +
+ {{!log "character-main" this}} + +
+ {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+ +
+
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + + +
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.run"}} + {{formField systemFields.movement.fields.run value=system.movement.run disabled=isPlayMode}} +
+
+
+ +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }} +
+
+ +
+ {{localize "LETHALFANTASY.Label.resources"}} +
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-spells_20241207085616.hbs b/.history/templates/character-spells_20241207085616.hbs new file mode 100644 index 0000000..ed7a2a4 --- /dev/null +++ b/.history/templates/character-spells_20241207085616.hbs @@ -0,0 +1,27 @@ +
+ + {{#if hasSpells}} +
+ {{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}{{/if}} +
+ {{#each spells as |item|}} + {{!log 'weapon' this}} +
+
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ {{/if}} +
\ No newline at end of file diff --git a/.history/templates/character-spells_20241208154207.hbs b/.history/templates/character-spells_20241208154207.hbs new file mode 100644 index 0000000..ed7a2a4 --- /dev/null +++ b/.history/templates/character-spells_20241208154207.hbs @@ -0,0 +1,27 @@ +
+ + {{#if hasSpells}} +
+ {{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}{{/if}} +
+ {{#each spells as |item|}} + {{!log 'weapon' this}} +
+
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ {{/if}} +
\ No newline at end of file diff --git a/.history/templates/character-spells_20241208154208.hbs b/.history/templates/character-spells_20241208154208.hbs new file mode 100644 index 0000000..3ac6d65 --- /dev/null +++ b/.history/templates/character-spells_20241208154208.hbs @@ -0,0 +1,26 @@ +
+ +
+ {{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}{{/if}} +
+ {{#each spells as |item|}} + {{!log 'weapon' this}} +
+
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ {{/if}} +
\ No newline at end of file diff --git a/.history/templates/character-spells_20241208154211.hbs b/.history/templates/character-spells_20241208154211.hbs new file mode 100644 index 0000000..0f47d3f --- /dev/null +++ b/.history/templates/character-spells_20241208154211.hbs @@ -0,0 +1,26 @@ +
+ +
+ {{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}{{/if}} +
+ {{#each spells as |item|}} + {{!log 'weapon' this}} +
+
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ +
\ No newline at end of file diff --git a/.history/templates/character-weapons_20241207085046.hbs b/.history/templates/character-weapons_20241207085046.hbs new file mode 100644 index 0000000..522e788 --- /dev/null +++ b/.history/templates/character-weapons_20241207085046.hbs @@ -0,0 +1,70 @@ +
+ +
+ {{localize "LETHALFANTASY.Label.equipment"}}{{#if isEditMode}}{{/if}} +
+ {{#each weapons as |item|}} + {{!log 'weapon' this}} +
+ {{#if (ne item.img "icons/svg/item-bag.svg")}} + + {{/if}} +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ {{#each armors as |item|}} + {{!log 'armor' this}} +
+ +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ + {{#if hasSpells}} +
+ {{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}{{/if}} +
+ {{#each spells as |item|}} + {{!log 'weapon' this}} +
+
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ {{/if}} +
\ No newline at end of file diff --git a/.history/templates/character-weapons_20241208154137.hbs b/.history/templates/character-weapons_20241208154137.hbs new file mode 100644 index 0000000..b95211b --- /dev/null +++ b/.history/templates/character-weapons_20241208154137.hbs @@ -0,0 +1,71 @@ +
+ +
+ {{localize "LETHALFANTASY.Label.equipment"}}{{#if isEditMode}}{{/if}} +
+ {{#each weapons as |item|}} + {{!log 'weapon' this}} +
+ {{#if (ne item.img "icons/svg/item-bag.svg")}} + + {{/if}} +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+ +
+ {{#each armors as |item|}} + {{!log 'armor' this}} +
+ +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ + {{#if hasSpells}} +
+ {{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}{{/if}} +
+ {{#each spells as |item|}} + {{!log 'weapon' this}} +
+
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ {{/if}} +
\ No newline at end of file diff --git a/.history/templates/character-weapons_20241208154150.hbs b/.history/templates/character-weapons_20241208154150.hbs new file mode 100644 index 0000000..b97609b --- /dev/null +++ b/.history/templates/character-weapons_20241208154150.hbs @@ -0,0 +1,48 @@ +
+ +
+ {{localize "LETHALFANTASY.Label.equipment"}}{{#if isEditMode}}{{/if}} +
+ {{#each weapons as |item|}} + {{!log 'weapon' this}} +
+ {{#if (ne item.img "icons/svg/item-bag.svg")}} + + {{/if}} +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+ +
+ {{#each armors as |item|}} + {{!log 'armor' this}} +
+ +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ + +
\ No newline at end of file diff --git a/.history/templates/equipment_20241130174329.hbs b/.history/templates/equipment_20241130174329.hbs new file mode 100644 index 0000000..7569353 --- /dev/null +++ b/.history/templates/equipment_20241130174329.hbs @@ -0,0 +1,14 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/equipment_20241210071700.hbs b/.history/templates/equipment_20241210071700.hbs new file mode 100644 index 0000000..ff5425f --- /dev/null +++ b/.history/templates/equipment_20241210071700.hbs @@ -0,0 +1,15 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.cost value=system.cost}} + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/equipment_20241210071704.hbs b/.history/templates/equipment_20241210071704.hbs new file mode 100644 index 0000000..162d1d6 --- /dev/null +++ b/.history/templates/equipment_20241210071704.hbs @@ -0,0 +1,15 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.encLoad value=system.cost}} + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/equipment_20241210071707.hbs b/.history/templates/equipment_20241210071707.hbs new file mode 100644 index 0000000..19923e3 --- /dev/null +++ b/.history/templates/equipment_20241210071707.hbs @@ -0,0 +1,15 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.encLoad value=system.encLoad}} + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/equipment_20241210072328.hbs b/.history/templates/equipment_20241210072328.hbs new file mode 100644 index 0000000..26aee37 --- /dev/null +++ b/.history/templates/equipment_20241210072328.hbs @@ -0,0 +1,15 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.encLoad value=system.encLoad}} + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151331.hbs b/.history/templates/miracle_20241209151331.hbs new file mode 100644 index 0000000..e69de29 diff --git a/.history/templates/miracle_20241209151334.hbs b/.history/templates/miracle_20241209151334.hbs new file mode 100644 index 0000000..c54149e --- /dev/null +++ b/.history/templates/miracle_20241209151334.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + {{formField systemFields.cost value=system.cost}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151340.hbs b/.history/templates/miracle_20241209151340.hbs new file mode 100644 index 0000000..b152775 --- /dev/null +++ b/.history/templates/miracle_20241209151340.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151341.hbs b/.history/templates/miracle_20241209151341.hbs new file mode 100644 index 0000000..b152775 --- /dev/null +++ b/.history/templates/miracle_20241209151341.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151342.hbs b/.history/templates/miracle_20241209151342.hbs new file mode 100644 index 0000000..95bfe8e --- /dev/null +++ b/.history/templates/miracle_20241209151342.hbs @@ -0,0 +1,28 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151345.hbs b/.history/templates/miracle_20241209151345.hbs new file mode 100644 index 0000000..fd407f8 --- /dev/null +++ b/.history/templates/miracle_20241209151345.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.material value=system.components.material}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151351.hbs b/.history/templates/miracle_20241209151351.hbs new file mode 100644 index 0000000..ad18a7e --- /dev/null +++ b/.history/templates/miracle_20241209151351.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.material}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151352.hbs b/.history/templates/miracle_20241209151352.hbs new file mode 100644 index 0000000..6dd0487 --- /dev/null +++ b/.history/templates/miracle_20241209151352.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151353.hbs b/.history/templates/miracle_20241209151353.hbs new file mode 100644 index 0000000..3a0321f --- /dev/null +++ b/.history/templates/miracle_20241209151353.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151358.hbs b/.history/templates/miracle_20241209151358.hbs new file mode 100644 index 0000000..4ab13ee --- /dev/null +++ b/.history/templates/miracle_20241209151358.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.catalyst}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151359.hbs b/.history/templates/miracle_20241209151359.hbs new file mode 100644 index 0000000..04bb825 --- /dev/null +++ b/.history/templates/miracle_20241209151359.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151405.hbs b/.history/templates/miracle_20241209151405.hbs new file mode 100644 index 0000000..42dc0d6 --- /dev/null +++ b/.history/templates/miracle_20241209151405.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151406.hbs b/.history/templates/miracle_20241209151406.hbs new file mode 100644 index 0000000..42dc0d6 --- /dev/null +++ b/.history/templates/miracle_20241209151406.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151410.hbs b/.history/templates/miracle_20241209151410.hbs new file mode 100644 index 0000000..8983903 --- /dev/null +++ b/.history/templates/miracle_20241209151410.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.miracleRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151411.hbs b/.history/templates/miracle_20241209151411.hbs new file mode 100644 index 0000000..8983903 --- /dev/null +++ b/.history/templates/miracle_20241209151411.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.miracleRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151413.hbs b/.history/templates/miracle_20241209151413.hbs new file mode 100644 index 0000000..3b00d6d --- /dev/null +++ b/.history/templates/miracle_20241209151413.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.miracleRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151414.hbs b/.history/templates/miracle_20241209151414.hbs new file mode 100644 index 0000000..3b00d6d --- /dev/null +++ b/.history/templates/miracle_20241209151414.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.miracleRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209151416.hbs b/.history/templates/miracle_20241209151416.hbs new file mode 100644 index 0000000..3b00d6d --- /dev/null +++ b/.history/templates/miracle_20241209151416.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.miracleRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209231609.hbs b/.history/templates/miracle_20241209231609.hbs new file mode 100644 index 0000000..3b00d6d --- /dev/null +++ b/.history/templates/miracle_20241209231609.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.miracleRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209231704.hbs b/.history/templates/miracle_20241209231704.hbs new file mode 100644 index 0000000..3b00d6d --- /dev/null +++ b/.history/templates/miracle_20241209231704.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.miracleRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209231709.hbs b/.history/templates/miracle_20241209231709.hbs new file mode 100644 index 0000000..df2969f --- /dev/null +++ b/.history/templates/miracle_20241209231709.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.prayerTime}} + {{formField systemFields.miracleRange value=system.miracleRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241209231719.hbs b/.history/templates/miracle_20241209231719.hbs new file mode 100644 index 0000000..df2969f --- /dev/null +++ b/.history/templates/miracle_20241209231719.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.prayerTime}} + {{formField systemFields.miracleRange value=system.miracleRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/miracle_20241210072338.hbs b/.history/templates/miracle_20241210072338.hbs new file mode 100644 index 0000000..e2b5261 --- /dev/null +++ b/.history/templates/miracle_20241210072338.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.prayerTime}} + {{formField systemFields.miracleRange value=system.miracleRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/shield_20241203131106.hbs b/.history/templates/shield_20241203131106.hbs new file mode 100644 index 0000000..c1062a3 --- /dev/null +++ b/.history/templates/shield_20241203131106.hbs @@ -0,0 +1,59 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + + +
+ {{formField systemFields.standing.fields.min value=system.standing.min}} + {{formField systemFields.standing.fields.max value=system.standing.min}} +
+ + +
+ {{formField systemFields.crouching.fields.min value=system.crouching.min}} + {{formField systemFields.crouching.fields.max value=system.crouching.min}} +
+
+ +
+ +
+ {{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}} + {{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}} + {{formField systemFields.destruction.fields.piercing value=system.destruction.piercing}} +
+ + +
+ {{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}} + {{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}} + {{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}} +
+ + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+
+ + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/shield_20241210071717.hbs b/.history/templates/shield_20241210071717.hbs new file mode 100644 index 0000000..80f32f6 --- /dev/null +++ b/.history/templates/shield_20241210071717.hbs @@ -0,0 +1,59 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + + +
+ {{formField systemFields.standing.fields.min value=system.standing.min}} + {{formField systemFields.standing.fields.max value=system.standing.min}} +
+ + +
+ {{formField systemFields.crouching.fields.min value=system.crouching.min}} + {{formField systemFields.crouching.fields.max value=system.crouching.min}} +
+
+ +
+ +
+ {{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}} + {{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}} + {{formField systemFields.destruction.fields.piercing value=system.destruction.piercing}} +
+ + +
+ {{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}} + {{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}} + {{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}} +
+ + {{formField systemFields.v value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+
+ + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/shield_20241210071719.hbs b/.history/templates/shield_20241210071719.hbs new file mode 100644 index 0000000..20557de --- /dev/null +++ b/.history/templates/shield_20241210071719.hbs @@ -0,0 +1,59 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + + +
+ {{formField systemFields.standing.fields.min value=system.standing.min}} + {{formField systemFields.standing.fields.max value=system.standing.min}} +
+ + +
+ {{formField systemFields.crouching.fields.min value=system.crouching.min}} + {{formField systemFields.crouching.fields.max value=system.crouching.min}} +
+
+ +
+ +
+ {{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}} + {{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}} + {{formField systemFields.destruction.fields.piercing value=system.destruction.piercing}} +
+ + +
+ {{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}} + {{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}} + {{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}} +
+ + {{formField systemFields.encLoad value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+
+ + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/shield_20241210071720.hbs b/.history/templates/shield_20241210071720.hbs new file mode 100644 index 0000000..f682144 --- /dev/null +++ b/.history/templates/shield_20241210071720.hbs @@ -0,0 +1,59 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + + +
+ {{formField systemFields.standing.fields.min value=system.standing.min}} + {{formField systemFields.standing.fields.max value=system.standing.min}} +
+ + +
+ {{formField systemFields.crouching.fields.min value=system.crouching.min}} + {{formField systemFields.crouching.fields.max value=system.crouching.min}} +
+
+ +
+ +
+ {{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}} + {{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}} + {{formField systemFields.destruction.fields.piercing value=system.destruction.piercing}} +
+ + +
+ {{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}} + {{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}} + {{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}} +
+ + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+
+ + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/shield_20241210072355.hbs b/.history/templates/shield_20241210072355.hbs new file mode 100644 index 0000000..eb9f066 --- /dev/null +++ b/.history/templates/shield_20241210072355.hbs @@ -0,0 +1,59 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + + +
+ {{formField systemFields.standing.fields.min value=system.standing.min}} + {{formField systemFields.standing.fields.max value=system.standing.min}} +
+ + +
+ {{formField systemFields.crouching.fields.min value=system.crouching.min}} + {{formField systemFields.crouching.fields.max value=system.crouching.min}} +
+
+ +
+ +
+ {{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}} + {{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}} + {{formField systemFields.destruction.fields.piercing value=system.destruction.piercing}} +
+ + +
+ {{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}} + {{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}} + {{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}} +
+ + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+
+ + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/shield_20241210172525.hbs b/.history/templates/shield_20241210172525.hbs new file mode 100644 index 0000000..728c12b --- /dev/null +++ b/.history/templates/shield_20241210172525.hbs @@ -0,0 +1,61 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + + +
+ {{formField systemFields.standing.fields.min value=system.standing.min}} + {{formField systemFields.standing.fields.max value=system.standing.min}} +
+ + +
+ {{formField systemFields.crouching.fields.min value=system.crouching.min}} + {{formField systemFields.crouching.fields.max value=system.crouching.min}} +
+
+ +
+ +
+ {{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}} + {{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}} + {{formField systemFields.destruction.fields.piercing value=system.destruction.piercing}} +
+ + +
+ {{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}} + {{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}} + {{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}} +
+ + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+
+ + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/.history/templates/skill_20241130132029.hbs b/.history/templates/skill_20241130132029.hbs new file mode 100644 index 0000000..fa9ba8e --- /dev/null +++ b/.history/templates/skill_20241130132029.hbs @@ -0,0 +1,21 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155751.hbs b/.history/templates/skill_20241208155751.hbs new file mode 100644 index 0000000..36dd0d9 --- /dev/null +++ b/.history/templates/skill_20241208155751.hbs @@ -0,0 +1,22 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155755.hbs b/.history/templates/skill_20241208155755.hbs new file mode 100644 index 0000000..0553512 --- /dev/null +++ b/.history/templates/skill_20241208155755.hbs @@ -0,0 +1,22 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if }} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155759.hbs b/.history/templates/skill_20241208155759.hbs new file mode 100644 index 0000000..036615f --- /dev/null +++ b/.history/templates/skill_20241208155759.hbs @@ -0,0 +1,28 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "skill")}} + {{formField systemFields.skillType value=system.skillType localize=true}} + {{formField systemFields.skillLevel value=system.skillLevel}} + {{formField systemFields.skillTotal value=system.skillTotal}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155807.hbs b/.history/templates/skill_20241208155807.hbs new file mode 100644 index 0000000..a6891e9 --- /dev/null +++ b/.history/templates/skill_20241208155807.hbs @@ -0,0 +1,28 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.skillType value=system.skillType localize=true}} + {{formField systemFields.skillLevel value=system.skillLevel}} + {{formField systemFields.skillTotal value=system.skillTotal}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155810.hbs b/.history/templates/skill_20241208155810.hbs new file mode 100644 index 0000000..74d2afc --- /dev/null +++ b/.history/templates/skill_20241208155810.hbs @@ -0,0 +1,26 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.skillType value=system.skillType localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155814.hbs b/.history/templates/skill_20241208155814.hbs new file mode 100644 index 0000000..89c4545 --- /dev/null +++ b/.history/templates/skill_20241208155814.hbs @@ -0,0 +1,26 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.skillType localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155819.hbs b/.history/templates/skill_20241208155819.hbs new file mode 100644 index 0000000..5caf242 --- /dev/null +++ b/.history/templates/skill_20241208155819.hbs @@ -0,0 +1,26 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155820.hbs b/.history/templates/skill_20241208155820.hbs new file mode 100644 index 0000000..5caf242 --- /dev/null +++ b/.history/templates/skill_20241208155820.hbs @@ -0,0 +1,26 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208155846.hbs b/.history/templates/skill_20241208155846.hbs new file mode 100644 index 0000000..5caf242 --- /dev/null +++ b/.history/templates/skill_20241208155846.hbs @@ -0,0 +1,26 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201615.hbs b/.history/templates/skill_20241208201615.hbs new file mode 100644 index 0000000..1545370 --- /dev/null +++ b/.history/templates/skill_20241208201615.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201626.hbs b/.history/templates/skill_20241208201626.hbs new file mode 100644 index 0000000..1cd83d5 --- /dev/null +++ b/.history/templates/skill_20241208201626.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weapon value=system.weaponClass localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201631.hbs b/.history/templates/skill_20241208201631.hbs new file mode 100644 index 0000000..d570795 --- /dev/null +++ b/.history/templates/skill_20241208201631.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields. value=system.weaponClass localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201649.hbs b/.history/templates/skill_20241208201649.hbs new file mode 100644 index 0000000..8d4fdfd --- /dev/null +++ b/.history/templates/skill_20241208201649.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponClass localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201659.hbs b/.history/templates/skill_20241208201659.hbs new file mode 100644 index 0000000..db5bd3a --- /dev/null +++ b/.history/templates/skill_20241208201659.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201704.hbs b/.history/templates/skill_20241208201704.hbs new file mode 100644 index 0000000..a10c4d1 --- /dev/null +++ b/.history/templates/skill_20241208201704.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack localize=true}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201705.hbs b/.history/templates/skill_20241208201705.hbs new file mode 100644 index 0000000..8e764bd --- /dev/null +++ b/.history/templates/skill_20241208201705.hbs @@ -0,0 +1,27 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201707.hbs b/.history/templates/skill_20241208201707.hbs new file mode 100644 index 0000000..aaedfe4 --- /dev/null +++ b/.history/templates/skill_20241208201707.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201711.hbs b/.history/templates/skill_20241208201711.hbs new file mode 100644 index 0000000..87532eb --- /dev/null +++ b/.history/templates/skill_20241208201711.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201713.hbs b/.history/templates/skill_20241208201713.hbs new file mode 100644 index 0000000..72cad4c --- /dev/null +++ b/.history/templates/skill_20241208201713.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201715.hbs b/.history/templates/skill_20241208201715.hbs new file mode 100644 index 0000000..78a1320 --- /dev/null +++ b/.history/templates/skill_20241208201715.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201717.hbs b/.history/templates/skill_20241208201717.hbs new file mode 100644 index 0000000..6b3f7aa --- /dev/null +++ b/.history/templates/skill_20241208201717.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208201718.hbs b/.history/templates/skill_20241208201718.hbs new file mode 100644 index 0000000..6b3f7aa --- /dev/null +++ b/.history/templates/skill_20241208201718.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208203751.hbs b/.history/templates/skill_20241208203751.hbs new file mode 100644 index 0000000..6b3f7aa --- /dev/null +++ b/.history/templates/skill_20241208203751.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204250.hbs b/.history/templates/skill_20241208204250.hbs new file mode 100644 index 0000000..edfa500 --- /dev/null +++ b/.history/templates/skill_20241208204250.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204253.hbs b/.history/templates/skill_20241208204253.hbs new file mode 100644 index 0000000..89a6cd5 --- /dev/null +++ b/.history/templates/skill_20241208204253.hbs @@ -0,0 +1,30 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} + + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204258.hbs b/.history/templates/skill_20241208204258.hbs new file mode 100644 index 0000000..7211944 --- /dev/null +++ b/.history/templates/skill_20241208204258.hbs @@ -0,0 +1,33 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponRange value=system.weaponRange}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204302.hbs b/.history/templates/skill_20241208204302.hbs new file mode 100644 index 0000000..bbfbaa6 --- /dev/null +++ b/.history/templates/skill_20241208204302.hbs @@ -0,0 +1,34 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponRange value=system.weaponRange}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204311.hbs b/.history/templates/skill_20241208204311.hbs new file mode 100644 index 0000000..3e4ded3 --- /dev/null +++ b/.history/templates/skill_20241208204311.hbs @@ -0,0 +1,34 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponRange value=system.weaponRange}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204312.hbs b/.history/templates/skill_20241208204312.hbs new file mode 100644 index 0000000..6740106 --- /dev/null +++ b/.history/templates/skill_20241208204312.hbs @@ -0,0 +1,34 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponRange value=system.weaponRange}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204314.hbs b/.history/templates/skill_20241208204314.hbs new file mode 100644 index 0000000..2b7bc51 --- /dev/null +++ b/.history/templates/skill_20241208204314.hbs @@ -0,0 +1,34 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : { + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponRange value=system.weaponRange}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204317.hbs b/.history/templates/skill_20241208204317.hbs new file mode 100644 index 0000000..251f5b6 --- /dev/null +++ b/.history/templates/skill_20241208204317.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{ }} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204318.hbs b/.history/templates/skill_20241208204318.hbs new file mode 100644 index 0000000..251f5b6 --- /dev/null +++ b/.history/templates/skill_20241208204318.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{ }} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204337.hbs b/.history/templates/skill_20241208204337.hbs new file mode 100644 index 0000000..9da8a83 --- /dev/null +++ b/.history/templates/skill_20241208204337.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{ availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204340.hbs b/.history/templates/skill_20241208204340.hbs new file mode 100644 index 0000000..242fc35 --- /dev/null +++ b/.history/templates/skill_20241208204340.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204448.hbs b/.history/templates/skill_20241208204448.hbs new file mode 100644 index 0000000..1ff5539 --- /dev/null +++ b/.history/templates/skill_20241208204448.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204601.hbs b/.history/templates/skill_20241208204601.hbs new file mode 100644 index 0000000..da6c974 --- /dev/null +++ b/.history/templates/skill_20241208204601.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204619.hbs b/.history/templates/skill_20241208204619.hbs new file mode 100644 index 0000000..19c3ba1 --- /dev/null +++ b/.history/templates/skill_20241208204619.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204621.hbs b/.history/templates/skill_20241208204621.hbs new file mode 100644 index 0000000..da6c974 --- /dev/null +++ b/.history/templates/skill_20241208204621.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204624.hbs b/.history/templates/skill_20241208204624.hbs new file mode 100644 index 0000000..ae9e658 --- /dev/null +++ b/.history/templates/skill_20241208204624.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204626.hbs b/.history/templates/skill_20241208204626.hbs new file mode 100644 index 0000000..fd4fd5c --- /dev/null +++ b/.history/templates/skill_20241208204626.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204629.hbs b/.history/templates/skill_20241208204629.hbs new file mode 100644 index 0000000..c6d8fdc --- /dev/null +++ b/.history/templates/skill_20241208204629.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204630.hbs b/.history/templates/skill_20241208204630.hbs new file mode 100644 index 0000000..387749e --- /dev/null +++ b/.history/templates/skill_20241208204630.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204631.hbs b/.history/templates/skill_20241208204631.hbs new file mode 100644 index 0000000..387749e --- /dev/null +++ b/.history/templates/skill_20241208204631.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208204634.hbs b/.history/templates/skill_20241208204634.hbs new file mode 100644 index 0000000..387749e --- /dev/null +++ b/.history/templates/skill_20241208204634.hbs @@ -0,0 +1,32 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208205643.hbs b/.history/templates/skill_20241208205643.hbs new file mode 100644 index 0000000..0630e9c --- /dev/null +++ b/.history/templates/skill_20241208205643.hbs @@ -0,0 +1,31 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241208205644.hbs b/.history/templates/skill_20241208205644.hbs new file mode 100644 index 0000000..0630e9c --- /dev/null +++ b/.history/templates/skill_20241208205644.hbs @@ -0,0 +1,31 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241210072108.hbs b/.history/templates/skill_20241210072108.hbs new file mode 100644 index 0000000..3779ec4 --- /dev/null +++ b/.history/templates/skill_20241210072108.hbs @@ -0,0 +1,31 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241210072122.hbs b/.history/templates/skill_20241210072122.hbs new file mode 100644 index 0000000..0630e9c --- /dev/null +++ b/.history/templates/skill_20241210072122.hbs @@ -0,0 +1,31 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241210072123.hbs b/.history/templates/skill_20241210072123.hbs new file mode 100644 index 0000000..0630e9c --- /dev/null +++ b/.history/templates/skill_20241210072123.hbs @@ -0,0 +1,31 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/skill_20241210072124.hbs b/.history/templates/skill_20241210072124.hbs new file mode 100644 index 0000000..0630e9c --- /dev/null +++ b/.history/templates/skill_20241210072124.hbs @@ -0,0 +1,31 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} + {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/spell_20241207223113.hbs b/.history/templates/spell_20241207223113.hbs new file mode 100644 index 0000000..c54149e --- /dev/null +++ b/.history/templates/spell_20241207223113.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + {{formField systemFields.cost value=system.cost}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/spell_20241210072359.hbs b/.history/templates/spell_20241210072359.hbs new file mode 100644 index 0000000..fa4bf8e --- /dev/null +++ b/.history/templates/spell_20241210072359.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + {{formField systemFields.cost value=system.cost}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} +
+ + {{formField systemFields.castingTime value=system.castingTime}} + {{formField systemFields.spellRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/vulnerability_20241130173822.hbs b/.history/templates/vulnerability_20241130173822.hbs new file mode 100644 index 0000000..5a5ef93 --- /dev/null +++ b/.history/templates/vulnerability_20241130173822.hbs @@ -0,0 +1,13 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.cost value=system.cost}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/vulnerability_20241210072403.hbs b/.history/templates/vulnerability_20241210072403.hbs new file mode 100644 index 0000000..05d11bb --- /dev/null +++ b/.history/templates/vulnerability_20241210072403.hbs @@ -0,0 +1,13 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.cost value=system.cost}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/vulnerability_20241217070713.hbs b/.history/templates/vulnerability_20241217070713.hbs new file mode 100644 index 0000000..3880773 --- /dev/null +++ b/.history/templates/vulnerability_20241217070713.hbs @@ -0,0 +1,13 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.gainedPoints value=system.cost}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/vulnerability_20241217070715.hbs b/.history/templates/vulnerability_20241217070715.hbs new file mode 100644 index 0000000..22d5895 --- /dev/null +++ b/.history/templates/vulnerability_20241217070715.hbs @@ -0,0 +1,13 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.gainedPoints value=system.gainedPoints}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/.history/templates/weapon_20241207222221.hbs b/.history/templates/weapon_20241207222221.hbs new file mode 100644 index 0000000..dcd4a7d --- /dev/null +++ b/.history/templates/weapon_20241207222221.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.standing.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.standing.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.standing.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.standing.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208154950.hbs b/.history/templates/weapon_20241208154950.hbs new file mode 100644 index 0000000..7c05944 --- /dev/null +++ b/.history/templates/weapon_20241208154950.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.standing.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.standing.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.standing.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208154951.hbs b/.history/templates/weapon_20241208154951.hbs new file mode 100644 index 0000000..af27042 --- /dev/null +++ b/.history/templates/weapon_20241208154951.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.v.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.standing.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.standing.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208154953.hbs b/.history/templates/weapon_20241208154953.hbs new file mode 100644 index 0000000..af27042 --- /dev/null +++ b/.history/templates/weapon_20241208154953.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.v.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.standing.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.standing.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208154957.hbs b/.history/templates/weapon_20241208154957.hbs new file mode 100644 index 0000000..2aa8499 --- /dev/null +++ b/.history/templates/weapon_20241208154957.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.standing.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.standing.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208154958.hbs b/.history/templates/weapon_20241208154958.hbs new file mode 100644 index 0000000..a258f74 --- /dev/null +++ b/.history/templates/weapon_20241208154958.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.standing.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208154959.hbs b/.history/templates/weapon_20241208154959.hbs new file mode 100644 index 0000000..a258f74 --- /dev/null +++ b/.history/templates/weapon_20241208154959.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.standing.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155008.hbs b/.history/templates/weapon_20241208155008.hbs new file mode 100644 index 0000000..22c0ffd --- /dev/null +++ b/.history/templates/weapon_20241208155008.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155009.hbs b/.history/templates/weapon_20241208155009.hbs new file mode 100644 index 0000000..62d7b97 --- /dev/null +++ b/.history/templates/weapon_20241208155009.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155020.hbs b/.history/templates/weapon_20241208155020.hbs new file mode 100644 index 0000000..62d7b97 --- /dev/null +++ b/.history/templates/weapon_20241208155020.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155035.hbs b/.history/templates/weapon_20241208155035.hbs new file mode 100644 index 0000000..62d7b97 --- /dev/null +++ b/.history/templates/weapon_20241208155035.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155037.hbs b/.history/templates/weapon_20241208155037.hbs new file mode 100644 index 0000000..62d7b97 --- /dev/null +++ b/.history/templates/weapon_20241208155037.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155038.hbs b/.history/templates/weapon_20241208155038.hbs new file mode 100644 index 0000000..62d7b97 --- /dev/null +++ b/.history/templates/weapon_20241208155038.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155039.hbs b/.history/templates/weapon_20241208155039.hbs new file mode 100644 index 0000000..62d7b97 --- /dev/null +++ b/.history/templates/weapon_20241208155039.hbs @@ -0,0 +1,74 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155919.hbs b/.history/templates/weapon_20241208155919.hbs new file mode 100644 index 0000000..6bb41e2 --- /dev/null +++ b/.history/templates/weapon_20241208155919.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155923.hbs b/.history/templates/weapon_20241208155923.hbs new file mode 100644 index 0000000..bedef5e --- /dev/null +++ b/.history/templates/weapon_20241208155923.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155928.hbs b/.history/templates/weapon_20241208155928.hbs new file mode 100644 index 0000000..590997b --- /dev/null +++ b/.history/templates/weapon_20241208155928.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField }} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155937.hbs b/.history/templates/weapon_20241208155937.hbs new file mode 100644 index 0000000..585c7c2 --- /dev/null +++ b/.history/templates/weapon_20241208155937.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass }} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155941.hbs b/.history/templates/weapon_20241208155941.hbs new file mode 100644 index 0000000..c5527f9 --- /dev/null +++ b/.history/templates/weapon_20241208155941.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155951.hbs b/.history/templates/weapon_20241208155951.hbs new file mode 100644 index 0000000..fff4ba5 --- /dev/null +++ b/.history/templates/weapon_20241208155951.hbs @@ -0,0 +1,76 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155954.hbs b/.history/templates/weapon_20241208155954.hbs new file mode 100644 index 0000000..984b1c5 --- /dev/null +++ b/.history/templates/weapon_20241208155954.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241208155955.hbs b/.history/templates/weapon_20241208155955.hbs new file mode 100644 index 0000000..984b1c5 --- /dev/null +++ b/.history/templates/weapon_20241208155955.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241210071725.hbs b/.history/templates/weapon_20241210071725.hbs new file mode 100644 index 0000000..f14733b --- /dev/null +++ b/.history/templates/weapon_20241210071725.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.encLoad value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241210071727.hbs b/.history/templates/weapon_20241210071727.hbs new file mode 100644 index 0000000..5a0c60d --- /dev/null +++ b/.history/templates/weapon_20241210071727.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241210072406.hbs b/.history/templates/weapon_20241210072406.hbs new file mode 100644 index 0000000..00347be --- /dev/null +++ b/.history/templates/weapon_20241210072406.hbs @@ -0,0 +1,75 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241210172530.hbs b/.history/templates/weapon_20241210172530.hbs new file mode 100644 index 0000000..ee3738d --- /dev/null +++ b/.history/templates/weapon_20241210172530.hbs @@ -0,0 +1,77 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241217070551.hbs b/.history/templates/weapon_20241217070551.hbs new file mode 100644 index 0000000..389b70c --- /dev/null +++ b/.history/templates/weapon_20241217070551.hbs @@ -0,0 +1,77 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.combatProgressionDice value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/.history/templates/weapon_20241217070555.hbs b/.history/templates/weapon_20241217070555.hbs new file mode 100644 index 0000000..7a2e9c2 --- /dev/null +++ b/.history/templates/weapon_20241217070555.hbs @@ -0,0 +1,77 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ + {{formField systemFields.weaponType value=system.weaponType localize=true}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + +
+ {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}} +
+ + +
+ {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.combatProgressionDice value=system.combatProgressionDice}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}} +
+ {{/if}} + + {{formField systemFields.equipped value=system.equipped}} + + {{formField systemFields.encLoad value=system.encLoad}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
+ +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=enrichedDescription + value=system.description + name="system.description" + toggled=true + }} +
+
\ No newline at end of file diff --git a/css/fvtt-lethal-fantasy.css b/css/fvtt-lethal-fantasy.css index 8e67855..1c27c98 100644 --- a/css/fvtt-lethal-fantasy.css +++ b/css/fvtt-lethal-fantasy.css @@ -239,31 +239,92 @@ i.lethalfantasy { flex: none; width: 70px; } -.lethalfantasy .character-main .character-characteristics .character-characteristic .experience { +.lethalfantasy .character-main .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; +} +.lethalfantasy .character-main .character-challenges .character-challenge { display: flex; align-items: center; - gap: 10px; - margin-left: 10px; + margin-right: 1rem; } -.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input { +.lethalfantasy .character-main .character-challenges .character-challenge .rollable:hover, +.lethalfantasy .character-main .character-challenges .character-challenge .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; +} +.lethalfantasy .character-main .character-challenges .character-challenge .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; +} +.lethalfantasy .character-main .character-challenges .character-challenge .form-group { + flex: 1; + padding-left: 5px; +} +.lethalfantasy .character-main .character-challenges .character-challenge .form-group .form-fields { + flex: none; + width: 50px; +} +.lethalfantasy .character-main .character-movements { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; +} +.lethalfantasy .character-main .character-movements .character-movement { display: flex; - width: 70px; - font-size: calc(var(--font-size-standard) * 1.4); align-items: center; - justify-content: center; - padding: 0 5px 0 5px; + margin-right: 1rem; } -.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input[type="number"] { - text-align: center; +.lethalfantasy .character-main .character-movements .character-movement .rollable:hover, +.lethalfantasy .character-main .character-movements .character-movement .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; } -.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input[type="checkbox"] { - width: 20px; +.lethalfantasy .character-main .character-movements .character-movement .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; } -.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input[type="checkbox"]:checked { - background-color: rgba(0, 0, 0, 0.1); +.lethalfantasy .character-main .character-movements .character-movement .form-group { + flex: 1; + padding-left: 5px; } -.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input[type="checkbox"]:checked::after { - color: rgba(0, 0, 0, 0.1); +.lethalfantasy .character-main .character-movements .character-movement .form-group .form-fields { + flex: none; + width: 50px; +} +.lethalfantasy .character-main .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; +} +.lethalfantasy .character-main .character-saves .character-save { + display: flex; + align-items: center; + margin-right: 1rem; +} +.lethalfantasy .character-main .character-saves .character-save .rollable:hover, +.lethalfantasy .character-main .character-saves .character-save .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; +} +.lethalfantasy .character-main .character-saves .character-save .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; +} +.lethalfantasy .character-main .character-saves .character-save .form-group { + flex: 1; + padding-left: 5px; +} +.lethalfantasy .character-main .character-saves .character-save .form-group .form-fields { + flex: none; + width: 50px; } .lethalfantasy .character-main .character-characteristics-play { min-width: 225px; @@ -1044,83 +1105,6 @@ i.lethalfantasy { .lethalfantasy .vulnerability-content input[type="checkbox"]:checked::after { color: rgba(0, 0, 0, 0.1); } -.lethalfantasy .save-content { - font-family: var(--font-primary); - font-size: calc(var(--font-size-standard) * 1); - color: var(--color-dark-1); - background-image: var(--background-image-base); - background-repeat: no-repeat; - background-size: 100% 100%; -} -.lethalfantasy .save-content input:disabled, -.lethalfantasy .save-content select:disabled { - background-color: rgba(0, 0, 0, 0.2); - border-color: transparent; - color: var(--color-dark-3); -} -.lethalfantasy .save-content input, -.lethalfantasy .save-content select { - background-color: rgba(0, 0, 0, 0.1); - border-color: var(--color-dark-6); - color: var(--color-dark-2); -} -.lethalfantasy .save-content input[name="name"] { - height: 50px; - margin-right: 10px; - font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1); - font-weight: bold; - border: none; -} -.lethalfantasy .save-content fieldset { - margin-bottom: 5px; - border-radius: 5px; -} -.lethalfantasy .save-content .form-fields input, -.lethalfantasy .save-content .form-fields select { - text-align: center; - font-size: calc(var(--font-size-standard) * 1); -} -.lethalfantasy .save-content .form-fields select { - font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1); -} -.lethalfantasy .save-content legend { - font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.2); - font-weight: bold; - letter-spacing: 1px; -} -.lethalfantasy .save-content .form-fields { - padding-top: 5px; -} -.lethalfantasy .save-content label { - font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1); - flex: 50%; -} -.lethalfantasy .save-content .align-top { - align-self: flex-start; - padding: 0.1rem; - margin-right: 0.2rem; - /*border-color: black; - border-width: 1px; - border-style: solid; - border-radius: 2%;*/ -} -.lethalfantasy .save-content .shift-right { - margin-left: 2rem; -} -.lethalfantasy .save-content .header { - display: flex; -} -.lethalfantasy .save-content .header img { - width: 50px; - height: 50px; -} -.lethalfantasy .save-content label { - flex: 10%; -} .lethalfantasy.fortune img { border: 0px; } diff --git a/fonts/caslonpro-bold.otf b/fonts/caslonpro-bold.otf deleted file mode 100644 index 809a29a4b0fab0a06a91759a679ca9d67a8fc41f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142972 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 Ve!uVPjErX=aQyu7Po0nR{|Bg8?^XZ+ diff --git a/fonts/caslonpro-italic.otf b/fonts/caslonpro-italic.otf deleted file mode 100644 index ef57f62ec108b7f7349b7c66181afa4f51514f11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167264 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%0A9?pZiz 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

!bnM)XvPKTP)+MKc_Ey-5-(_4 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 diff --git a/lang/en.json b/lang/en.json index 3de42d3..ae3df0e 100644 --- a/lang/en.json +++ b/lang/en.json @@ -85,6 +85,14 @@ "label": "Appearance" } }, + "perception": { + "value": { + "label": "Perception" + }, + "bonus": { + "label": "Bonus" + } + }, "saves": { "will": { "label": "Will" @@ -207,6 +215,9 @@ "mace": "Mace" }, "FIELDS": { + "combatProgressionDice": { + "label": "Combat progression dice" + }, "equipped": { "label": "Equipped" }, @@ -438,6 +449,9 @@ "cost": { "label": "Cost" }, + "gainedPoints": { + "label": "Gained points" + }, "description": { "label": "Description" } @@ -461,6 +475,35 @@ "Platinums": "Platinum" }, "Label": { + "Movement": "Movement", + "movement": { + "walk": "Walk", + "run": "Run", + "sprint": "Sprint", + "jog": "Jog" + }, + "perception": "Perception", + "bonus": "Bonus", + "Saves": "Saves", + "grit": "Grit", + "gritEarned": "Grit earned", + "luck": "Luck", + "luckEarned": "Luck earned", + "saves": { + "will": "Will", + "dodge": "Dodge", + "toughness": "Toughness", + "contagion": "Contagion", + "poison": "Poison", + "pain": "Pain" + }, + "Challenges": "Challenges", + "challenges": { + "strength": "Strength", + "agility": "Agility", + "dying": "Dying" + }, + "HP": "HP", "characteristics": "Characteristics", "characteristic": "Characteristic", "description": "Description", diff --git a/module/config/system.mjs b/module/config/system.mjs index 6b38f2e..9ed5a0f 100644 --- a/module/config/system.mjs +++ b/module/config/system.mjs @@ -78,6 +78,7 @@ export const SYSTEM = { SPELL_RANGE: SPELL.RANGE, WEAPON_TYPE: WEAPON.WEAPON_TYPE, WEAPON_CLASS: WEAPON.WEAPON_CLASS, + COMBAT_PROGRESSION_DICE: WEAPON.COMBAT_PROGRESSION_DICE, MONEY, ASCII, ROLL_TYPE, diff --git a/module/config/weapon.mjs b/module/config/weapon.mjs index 553588a..0fc250f 100644 --- a/module/config/weapon.mjs +++ b/module/config/weapon.mjs @@ -4,6 +4,15 @@ export const WEAPON_TYPE = { "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" } +export const COMBAT_PROGRESSION_DICE = { + "d4": "d4", + "d6": "d6", + "d8": "d8", + "d10": "d10", + "d12": "d12", + "d20": "d20" +} + export const WEAPON_CLASS = { "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", diff --git a/module/documents/item.mjs b/module/documents/item.mjs index 4e0151e..6e1bceb 100644 --- a/module/documents/item.mjs +++ b/module/documents/item.mjs @@ -4,7 +4,7 @@ export const defaultItemImg = { equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", - invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + vulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_vulnerability.webp", shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp", miracle: "systems/fvtt-lethal-fantasy/assets/icons/icon_miracle.webp" diff --git a/module/models/vulnerability.mjs b/module/models/vulnerability.mjs index 4c11057..3ad6a04 100644 --- a/module/models/vulnerability.mjs +++ b/module/models/vulnerability.mjs @@ -6,6 +6,7 @@ export default class LethalFantasyVulnerability extends foundry.abstract.TypeDat schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.gainedPoints = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) return schema } diff --git a/module/models/weapon.mjs b/module/models/weapon.mjs index 0d62c31..fa8483d 100644 --- a/module/models/weapon.mjs +++ b/module/models/weapon.mjs @@ -19,10 +19,11 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { damageS: new fields.StringField({required: true, initial: ""}), damageM: new fields.StringField({required: true, initial: ""}) }) - schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} }) schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4", choices: SYSTEM.COMBAT_PROGRESSION_DICE}) schema.speed = new fields.SchemaField({ simpleAim: new fields.StringField({required: true, initial: ""}), diff --git a/styles/character.less b/styles/character.less index c16d357..a60bdf3 100644 --- a/styles/character.less +++ b/styles/character.less @@ -128,30 +128,96 @@ width: 70px; } } - .experience { - display: flex; - align-items: center; - gap: 10px; - margin-left: 10px; - input { - display: flex; - width: 70px; - font-size: calc(var(--font-size-standard) * 1.4); - align-items: center; - justify-content: center; - padding: 0 5px 0 5px; + } + } + .character-challenges { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-challenge { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; } - input[type="number"] { - text-align: center; + } + } + } + + .character-movements { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-movement { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; } - input[type="checkbox"] { - width: 20px; - } - input[type="checkbox"]:checked { - background-color: rgba(0, 0, 0, 0.1); - } - input[type="checkbox"]:checked::after { - color: rgba(0, 0, 0, 0.1); + } + } + } + + .character-saves { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + + .character-save { + display: flex; + align-items: center; + margin-right: 1rem; + .rollable:hover, + .rollable:focus { + text-shadow: 0 0 8px var(--color-shadow-primary); + cursor: pointer; + } + .name { + flex: 1; + min-width: 3rem; + margin-left: 0.5rem; + } + .form-group { + flex: 1; + padding-left: 5px; + .form-fields { + flex: none; + width: 50px; } } } diff --git a/system.json b/system.json index b55ae92..7b14e91 100644 --- a/system.json +++ b/system.json @@ -6,7 +6,7 @@ "download": "#{DOWNLOAD}#", "url": "#{URL}#", "license": "LICENSE", - "version": "12.0.3", + "version": "12.0.4", "authors": [ { "name": "Uberwald", diff --git a/templates/character-main.hbs b/templates/character-main.hbs index d687544..0d87491 100644 --- a/templates/character-main.hbs +++ b/templates/character-main.hbs @@ -9,11 +9,34 @@ -

+ +
+
+ {{localize "LETHALFANTASY.Label.HP"}} + {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.perception"}} + {{formInput systemFields.perception.fields.value value=system.perception.value disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.bonus"}} + {{formInput systemFields.perception.fields.bonus value=system.perception.bonus disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.grit"}} + {{formInput systemFields.grit.fields.current value=system.grit.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.gritEarned"}} + {{formInput systemFields.grit.fields.earned value=system.grit.earned disabled=isPlayMode classes="character-hp"}} +
+
+ {{localize "LETHALFANTASY.Label.luck"}} + {{formInput systemFields.luck.fields.current value=system.luck.current disabled=isPlayMode classes="character-hp"}} + {{localize "LETHALFANTASY.Label.luckEarned"}} + {{formInput systemFields.luck.fields.earned value=system.luck.earned disabled=isPlayMode classes="character-hp"}} +
+
+
-
-
+ +
+ {{localize "LETHALFANTASY.Label.Saves"}} +
+
+ {{localize "LETHALFANTASY.Label.saves.will"}} + {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + classes="rollable" data-save-id="will" }} + {{localize "LETHALFANTASY.Label.saves.dodge"}} + {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value disabled=isPlayMode + classes="rollable" data-save-id="dodge" }} + {{localize "LETHALFANTASY.Label.saves.toughness"}} + {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value + disabled=isPlayMode classes="rollable" data-save-id="toughness" }} +
+
+ {{localize "LETHALFANTASY.Label.saves.contagion"}} + {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value + disabled=isPlayMode classes="rollable" data-save-id="contagion" }} + {{localize "LETHALFANTASY.Label.saves.poison"}} + {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value + disabled=isPlayMode classes="rollable" data-save-id="poison" }} + {{localize "LETHALFANTASY.Label.saves.pain"}} + {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=isPlayMode + classes="rollable" data-save-id="pain" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Challenges"}} +
+
+ {{localize "LETHALFANTASY.Label.challenges.strength"}} + {{formField systemFields.challenges.fields.str.fields.value value=system.challenges.str.value disabled=isPlayMode + classes="rollable" data-challenge-id="str" }} + {{localize "LETHALFANTASY.Label.challenges.agility"}} + {{formField systemFields.challenges.fields.agility.fields.value value=system.challenges.agility.value disabled=isPlayMode + classes="rollable" data-challenge-id="agility" }} + {{localize "LETHALFANTASY.Label.challenges.dying"}} + {{formField systemFields.challenges.fields.dying.fields.value value=system.challenges.dying.value + disabled=isPlayMode classes="rollable" data-challenge-id="dying" }} +
+
+
+ +
+ {{localize "LETHALFANTASY.Label.Movement"}} +
+
+ {{localize "LETHALFANTASY.Label.movement.walk"}} + {{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.jog"}} + {{formField systemFields.movement.fields.jog value=system.challenges.movement.jog disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.sprint"}} + {{formField systemFields.movement.fields.sprint value=system.movement.sprint disabled=isPlayMode}} + {{localize "LETHALFANTASY.Label.movement.run"}} + {{formField systemFields.movement.fields.run value=system.movement.run disabled=isPlayMode}} +
+
+
+
@@ -32,18 +115,17 @@
{{localize "LETHALFANTASY.Label.characteristics"}}
- {{localize "LETHALFANTASY.Label.str"}} - {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value - disabled=isPlayMode classes="rollable" data-char-id="str" }} - - {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent - disabled=isPlayMode }} + {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }}
{{localize "LETHALFANTASY.Label.int"}} {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value disabled=isPlayMode classes="rollable" data-char-id="int" }} - + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent disabled=isPlayMode }}
@@ -51,7 +133,7 @@ {{localize "LETHALFANTASY.Label.wis"}} {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value disabled=isPlayMode classes="rollable" data-char-id="wis" }} - + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent disabled=isPlayMode }} @@ -59,7 +141,7 @@ {{localize "LETHALFANTASY.Label.dex"}} {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value disabled=isPlayMode classes="rollable" data-char-id="wis" }} - + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent disabled=isPlayMode }} @@ -67,7 +149,7 @@ {{localize "LETHALFANTASY.Label.con"}} {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value disabled=isPlayMode classes="rollable" data-char-id="con" }} - + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent disabled=isPlayMode }} @@ -75,7 +157,7 @@ {{localize "LETHALFANTASY.Label.cha"}} {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value disabled=isPlayMode classes="rollable" data-char-id="cha" }} - + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent disabled=isPlayMode }} @@ -83,7 +165,7 @@ {{localize "LETHALFANTASY.Label.luc"}} {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value disabled=isPlayMode classes="rollable" data-char-id="luc" }} - + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent disabled=isPlayMode }} @@ -91,7 +173,7 @@ {{localize "LETHALFANTASY.Label.app"}} {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value disabled=isPlayMode classes="rollable" data-char-id="app" }} - + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent disabled=isPlayMode }} diff --git a/templates/vulnerability.hbs b/templates/vulnerability.hbs index 05d11bb..22d5895 100644 --- a/templates/vulnerability.hbs +++ b/templates/vulnerability.hbs @@ -3,7 +3,7 @@ {{formInput fields.name value=source.name}} - {{formField systemFields.cost value=system.cost}} + {{formField systemFields.gainedPoints value=system.gainedPoints}}
{{localize "LETHALFANTASY.Label.description"}} diff --git a/templates/weapon.hbs b/templates/weapon.hbs index ee3738d..7a2e9c2 100644 --- a/templates/weapon.hbs +++ b/templates/weapon.hbs @@ -27,7 +27,7 @@ {{#if (eq system.weaponType "melee")}} {{formField systemFields.defenseMax value=system.defenseMax}} - {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{formField systemFields.combatProgressionDice value=system.combatProgressionDice}} {{/if}} {{#if (eq system.weaponType "ranged")}}

G&celpA%SW(~C!gCQ2Q?8H)a3 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 APXGV_ diff --git a/fonts/caslonpro-regular.otf b/fonts/caslonpro-regular.otf deleted file mode 100644 index 15f079684500b9d9c8928ef2d2f5341f3eb1030b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161820 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 >5-0>bR)UOyVL3j zJ0*@5xiHdYJko;j@hih8%>9TLTYt_tqz!^khS#W+&0o zP+z;tG&R%{P4p%y6uXVeL;{o{$J*8>Hyo}!e&qbzM;N7MqQFy-dYx~pqq>~Hq}ZTK zq0)u-k|bUlOcH9Bg?ll@kGuh5FE*FTz5^+E>S|c*nW4e3su(zsAx%tgR#RCBIKph&3U1( zQy&G5$W7Q;C%|uG+s3sI5ibQg``{2XIw&4fj=7xxU#rzwA8Niv*@QPEEW>!?K5X~Y#_GS?It^AvWv!ctG>p&%AZvkK{+^o?5x$xo4i+Qa3X@zekBB z5^hWvT9E|K@3w-|nd0)_adgL)9hQP%K-39)SN?5y~ynl`lBUPzb;<7p4Z36ScM>=Y=MuofvwCMLu| z@|VHGK%=3%SFExSa7#*4$*I#|`-nV8`-LVf<-@GfFOCj}slIR~4g@E_@w8PiSqWR1 ziI2qIACFQ}5Cc2Zqo6)*3WeAAk-0!ob3i{DCyGPU7$>|eB!%EmKX-ETnNz3t9sA(H zn3Z7#w?h$<99UE_TRYKVYpdSTGPq|fH#c0MM*7o3qr|D55v#)q=_Lg*rr-su9F>cE z)pGTUQD`_r0@VaHSa~^f#jrTbEefkpx0fGh5aDMVa~1FK#*_dp?C zC=dmA+y;#j&LVh30i<;$5|2Y*kr%-L9$+L_jPk(N2!b#%r6~`z79eNhCyo*CHq39| zPq`F9OO%T-)EevW%SBUtdTj!V5J@I!_j*tbfNHi0#?CH1h`q07yLsE%BM*@; zbq2bSrfs-qLiD(tyo*GN2DowD;Zls9=C%&o>Ph$!HQaYj?5b?HnrWBI<#joolJlCI zvh7NtnY7sX)|&aYG@S@8Nu~rB?QVmN#hztS1BF~prlP%k?^s^nJDgM$GAY|EZl4P^ zU2Sc_w@7#zhxJ9tQUvVyYt!y}T$78)Y&Ew=mQnMv~~s6Rn4)h_Z&R zbHcvVpWciX`ButmeauGOd-h&cCsWslet+M4unOW0Ff)&=rBxJ3l-bb&>zy>RuG zi@agF`od%1Bkp|)!^1PLzIt$GVs>7saXH;iyyRfmPsx636pJd(ZZ!89i({jsdk=2j zyPf7cc`xbmhzbN%*$6RFccgMhQ*~2os=Zi9CwmgSGwAz`0Fn){iB1W)klZ)i+QbG|E5u{vZp#@$f*1l1k+U_{Mp6!G)#G496qgvii-zxxwM$9$Gt4lok?7;)<)I>O%&%$L=zc z#;(BBvDXTTRA7hQ;kV)ax0YTp%&-A&EhuO#0wz(ncuV)lY(Y){XvDFxnAfjmhL)9I zV%3A-N9)V|e3Kg~VmNk%ruz5y4Y*hYT=>QSa8cMj1jWVTGF^~!2i@c)ed#&_1F9QK zn$1dY;s|KWiqGx#z#|MHc1`KMzbri<4YrLm&D0vFj0NNA_pm;GW3DUzwkfy2{)5Ng zcz(PwBg`)k{8M-1{)g(O|9^G2YI+;j9(F-#^KYO3c3&C4?Ab@3-nn{#v87v~zqka6 z6RoLW(V&%@#|X%~Sc!>oab7R^M!_0@tj6o7ERJBvNeiff1QNY87?#LL57_@r93#*n z{3@|v{Eqa<$Z~<@Eci_}0Er?m@%sJ&gd`wR2q+gLbal`X{21ktAIs(?;0kbhvbCdf ztmKY@m9Gzm)t?8>A;v7%2&4M3t6;7ssAbo!D|rLa@JMzDd}l2wiGQZU2lm7h`mrJH z{7Qh)-mp%~|1N?{5vq&%JWUQa0p4}2keEt^DJ6``xg-=j9#B|dT7bQ^#HYS7=lKVj zQnx4tMNQlZSt;#_3XpMR#ds7rGWM&$$)i!AoDu!FrVr7sv>4QFca&lkE4Tn0B3}gZff%$othjIuu!RFMn%+_ZtBuX1;$CO4WGoL>2yqR z(k7AV-bCS_JEak}P<&@6hmc$nX&FE>v0D=iEraTZX>^$w8yPSLoM|e`xzjEZxkzh6 z(ovw5Js`b8S&S0OKBJ#zeXVRaOd4$|O3F+`$#5dTJ2t$;J7^QjT#pO~mq|g3iu=%P z2G!z5?TzCTJgQ6E;#MP3yW8jQeD+*FJRc!dS_TWc`YYAOR`^oqeQI0BZS-W75(1k^FX ztmuPk#UDq40Jp9y*Bx5yv$zC1$@)2#@Fk%XLNl+xCcVxHTU*}B<9o(n3z`mnsi@HF zf{Ab<9K#xlLOVZNNr_Pn5XG1R zoL_Gba$y@4RI*`(^rn0=*y1{d!N<|9^BFiM6l7@>!!-x(dPNC@60{fkpI}1&N8~ST zJTEv|91pb#JlZ6b^nmw|U(pM<8Is6~$0IzPVT6Q(^Y|RBUVXRprUCjA0j`l)(uEUT zkPkBu@J`0;vZS3!Z^0AHiJ)CL!i)%+ z!MQ&{@8X93BhG?J%LBBKCB+p*x!brt(`!&zQHZ(Hz29V`9JC?&W4)M1wBci!PSf6c zK`nH`R0!WiyMc0D)D0I=6m$FXe!^iH`h0zfE|G?q3$hdB4)L0!E`^D(ihk9529MxG zj2&@eKz1r3)|4WP2H{ooLrGi-O&i}^WWhspL5+l1P`lD%9f%%$93mxIzkk?(P}Bo) z9HitBGl@{!qb`sqiVEZ>Vg`JxkXO;R^Io(rUUKV8-}^p(=F&dJ${Tr;N3=;+#gbNf zQ&~mdf|9~+8PXXA+8V}XgKXM`8hBVf;JYO41{Uikw^M<>1X?My7)4>DZW)iVx7GkX z0ngcFKJJ#a=7Eo-X@t-zW>NACI0ElXc+r~t(3!zCMPKr(HyawZH?FRab)>Ac#2#*T z5?~?o$bV{YxI(8}+Y#6R(m}W@4N^b;j2Env*fSkY494J0P)??*s+!n2^2mqp6%T5o zBerWhCDHOQu>}RVqS>U0HAl&_@sVDIhQlT%qy_Q}z8B&@$YjgF8^OT4jFt9PohDz) z?jNAT@VL;-O2bsPuRBZbJ+bH9bkkgoLc6UTi*bFzKFGq)sHvs4vm+*f|KnhJlT)uL znQTP6+qAj5es~X@bu^L=9z!s({tj~C-q1*zI9n@fA~f}lz!#_jJCy5m?Jzv*OzMr! zs?Am8){gzfk)gRmgW4clp}huI)}4WzrQTbWI7|#C(n$MZ(?TmqDrpe-^*$v4!Z`kp z%h%l8l&XX+{a|JflAPGB98+m5E^tXYm4Q=kOz$kP{aNC`o_uyJX>3hXX^fdYl78M; zU)V<0Jm2sH&Bb=G1m_i4O5ORk!Qy2-HuO-)-T;|Mp=<<(>Td?d`;WXCyVM=KRh=3v$tx0VEm^&CVJ@lIVmxB8B zNHP@)K<~k~+KKNTT>t)~)L{GZm%K2_s#;Bz&2&9fQKA~&8JjJP4a$-Lk5Z4AtAY3i zI9&d@kFPI%<)zYBwmo{{>ERk0d#|dH+`V-sq6_L#H!9TlsY%|E?;txkqpdk#fA*ch zS5CjxF=-p6lbrEQH|YT!M#I^XCAwWKYigH|{raafC#bUj#v>JuGiGSpcrR^dJKA>; zKM4MQ^M8|PUmYDdKm+N6Nlf(cM!{e41J*=qu2=%;^@K#8mf5=EPI7Dg&KBGe&eM`( zQibGL0)e%5T1igJ88V*my09FWF+Ql{7ak}oVYZ}032(AzSf7+notMeTT+7NdT_*=S zP{%%yF6{Ns*S}2j3T7=SphTj{Yi=%^o_nZb;;(_BkBEdj;DWVtkP75Rq)2O66#LV_ z%=rjM0qci$9$E%k9vXm@0pd-H@32CWkNs(}kcS)?Hobwsbz%(ISXc;p;6~!|kXrFe zS{^OPAqL=PREFIa1|Jw;BaruL@eL_x>V0{%59p^mh-Kiym3%m=Z06uYOyKmnxF+cr zC|{Ekf&^$TXz?cpBAP80gcvpiqflL-8sfg3LTJNrgmT6U~Q&XM>0IYiBKu33Ui67O7t;4H{Y=dW^f5Y!?Di2faIg*NL}?H{LmO82O0> zOw0qG;EwhRqHSu`ftksJX;DjVaGhol%$%Yu(B9Ne@U5l~0j(S2m`Tcbc6iGv^0(QM zgTr*$oaG@Vsrm7c@iVJ5U4`9Ece78dy_MLQuSqn+!7>P-z}(&h8RZnzDm^wwxLaGS zBHB;%MZlmB36A>4t+f+%ML1TXExsy8hCo8VBorZgGOJ84tbfkUm)3%H@*}#Z@8`&( zExaA=11>aWwdT?@22f6bcuFBzl&EBE?!6!>1sjEJriabEtr+nllH$Htt?HK^H%|V> zJp0zsH}mJ_rjD!2O={bSaqppiBkUh1U){EE`R56EdEWQg($2SGMQ|gm2>$oijILPr z{bNtvAeAHJ#>}9*_?<6S8-%!5{r=KP>d2M;Ae63l_ti7YBy3%6O|n#*>lk;SE7sow?ra zq5a4Khl!s4^Fv{3BoqyTtZ2z}eJSi>$*BF;R9ZDxnX=8hv zt<^?DK8J{y4IKZ8Hr+7L@O&g)T=X{adf>FsLrGT+q{Kuf?zBmiQTBEWkp(H6p4ydh zh*0#PM-WnCXu3D*#de#dFiA3}D8=#4Xrn@#BX)0$$i~Mf5(&W-qAbBQ2bZ?~NY0{5e!VL_M_P%FvH?1BVqKXJJUgLoJ=H@eBRpELG!J!xL4(r4y?|r|e4k=!7u9cN47O6tt0W zLAX_+TU3$d%u$APxSb4(wOcwDFgMlK3qCko(GjH(A$rV`*9ioZ@<{N0G;L}L-{4mIyUUDjK9w3ReFZ4P_FH6qaC zLb9oq@Oc{FBaqlB^O>ra?yqg9CJ0B_-IQPeeY!2_s_4Rh4JShE`jBYm@;c5xl)}jn}QDfxkz4 zqiJ$ddcqAZ3}lX*(kxlYR$E))LV!Ir$%HO3y(dQQEAFgBQdtW&%h57*fpr;ITWxo3 ztHkG$@mNocN=9QiRe#>%(6EP>b!>&M+q1U1nlMYoY&s=nr+N!xeFdXEP1(JhYpaNk zXh$}yB$AXUz&>VlY7m4suq}`z(Remm`?vCp#YwoZ9FHiyV3{xU-U?mF6zu9G)T@_1 z;r;OnqASoDG*Y3zUoh+r`Y-(qB{T5S&>sah9;3rpk`anM4$RsPZC$ikgAM`#N9S~r zQu0&C1+Wrl4hTEpg{rx;kgQ{3aAx0VOhXA4Yt0`ryEusKT*AU_ajyfaCV;JkKEkF0 z!?1UWW#Km4^U*$#{P2Ar!P{bDW^-fLZg|{iB?6#Sqa-T9;<)yKuE3>r`9zOfNoXj%rrY$!wY-o8n#53ek2Z>pa7dyi0J>&Z#N}3_PE}RSnN41H}&3 z%`xCHU-$FUHw`c%cOhql**2Gek4Yo|**zkXE(Ux$rwu0lxZVm~(*tks%ZJkmIy_|z zV|HG`hnhV$f=xRVSd8YAB+fP>ngp_Rje6Sfa z;awpBySQVq_71T9LG_92)Y})2NlERET%n-``1Rp6wRL##g&#y6u!!^8jIkKqUcC!P zYB1Prr2VoO;y}_3NdtsEg)bSu}h>S*1qy+ov$fJy)e^wazD`{{RRaD$|_t-nAgv=n(duVkX!A}j?QXg zSN{v2emZh`dZwdbPf&KaRV0XkUl*t2KM$1O-qcakNi~{w?W!XlKNaYI?XT*hKb_xk zVaLnxvRv{`=g~*LLx3Lm^;rd_H<@Me@A{|(|?hWZe3aN z@!4Pe>}Oj}J@Z8MnrA8p&2vMelY=>X-Yn4^NY@b}nu=v|vuztz?^yTv9UZT~a&Ub9 z)TBi6pA=s|N2uki)SF5#-F(9{<~AzZ{_Ib0CczQ`1FB5;o=&%_>iFR!!}(lH@xq*3^N2QC{8k&Wdz8t| z4NOf=*nfKe{SBM%f8_j+|4XHE>c2v#b7dK`Mz0fV2OIi%y_^*bMMAx`^p&@Mc$~WF z+>7u3j(GckdhO9(AmvLMs?ATVAWHYCx7YSjYVD&Wk;SP=Ua>5I_d5SY z(NNvpTD`N^I5V5;o0&BY?$pR_%XFbjl%a#~>gbd#{ROe7(C_K%)Vfp!z%LGFGN$IH zv~^@811C{yu1S-hmFt3~ufrVC+S(Sg7YCKpV3EzV(bxX{mD2XlmbMMIX{)K5wAIwF zu$o$qBESPC@X&8Vz1rhbbLaAJ9(`+eWM*<8I_K@}$^LBQ<Zx6AGBjeL+r~xgt<|IOz z%4fsyT&MgzCXTjVfRmUS(PeMSikK;)ZNP1(ewsr81z^#FU|#@d(Jet$;y5#5f%%Gd z0EX?wlgfKj=xmyhb6H2Yc_52r2y&L*qn;NuCWDTc<$46t3c1VS{Gxn99+i>=MP7wmEDjV|%)-Xrp9+VjhBB7XYafVL2Z2 z-b;(5N6D2h1OyAsqdr?Ikx9hU5}lX(y+cI7EZJ(UyI{(OAze$swinZ!qUzL!@UD=rUGTi_jNyXv71bGj{E7Q&d|qG=gf?!cbu7)-CV zt;;a$I6F82iK?rdQC3OB$V0*AIh?ZkVGv|gz+>vm{6-A7t1G((T zcrCb4ubh<}@ zxl^#t*9CJYC*5#WXiUu`+XZ)Du+o*Tq$%&vi?El3zk)yDY1$m9Hs{%NHl3CGVQvLR z6PeFBco2HQFV?^w4E<*BhRRl$XE~FpSYiZrr{R%gkqnJ`8E0j^7Z&7@=`uu9f6KrE zpmhag0`1>fe!-}ag3F03gwKtd(*_^1qrdZ7K7V1u|(wzn<+{ebTmxe z7#c)LBbeHS3+tu}OjEwY+le2Kq zEyrCDQ$Y+z1Oyw~Y;=icxX4(lJ~ES9Z5uR55CP2QzQ#!lEunN&K)`z12Q$TuJ4X&e zSA(S?_UYxAf{k=BjKiEa7i=^Fy8xJke89uD2FC%tqVH*^%13*g3biW1C`0jXm z%nO$FO*>C%4j&5-4x&4%l-<#f=?Dy4ZH0(KBk!x%oSF(vErnYerT*|6jsMt&k@xbp z;MCF=ZeK~M|Nf1C9;YkU!Dj86)05$;rO#vAr5*p@asNE$m&cWE|Av-d!u8-5gX{h5 zpVxa5H^$*I`qEwB_|mxzw}M{p!u9BHFCO~;T~McAxS7dtofbPS9HsfYf!1^(bncm# z*Ps97P}3o+ddKeZ`ZpW?^yBF918QKbP5s7(vG)!&jxLW(t3On4EG>R7_wf_zRa0kH zpKI9jSy7tUcjVCI@JyNSo{`;U-^IT^4?);b4M_<@nj44H93A&)8e+!bu~h%xr+Tx= zSX!pbp2D8sFCn&)B%ep58Kr3NCl9|icVfuVYwn?4F?d!=1-SDK8UtG?t^wL4mnV#z z5lCzFv3Ht+*@_{pYlo-p+oTRk-=pLNzu5azOA!M^gFeSofj7hor zM)wZQAKN;%?iSa*T`jS?jETOiN`fI5<1Vcu$Td z?Y}J0fU$PEtG5A;NmwU3HV%wGO%1+OJ-(8>{-MW8-`XK>i&xTe%c0V>Z3N@>xGAnV z-b~(h)%0jGp93%mnh;qg#9rN<`PEY!)|LMC(I0oyr5|4P9%?D7i{6Lz@jYjEC!+Af zB9E!xu6(S^VQJN#b!K?C6kZ@w-zcZ&8;mP=C=Iq-Kj%+_jab36s4Ig z!Auol9ED~yy1V~>vQRjw=D-6r&E0kF^;4Q5h1L>VbEZImfQZoxRD}EC$nHynpI>kA zH8ZwutKR8qY^@_&2e%z5oQ$de@=5LMSZ=`!CbD1w9hy2(Dl1+2qt&H#>(-QRQJd6N z>Y|^V*pq*^{!X*6+i%r+4NPEOtu(5S&s)#zdA0sc^PlSG)y&v|v0oiTcL~f4PySY= z@0yT`pY3s;?pLqc{I(PQNB6e6ak}j8kMm5~_wX-OQg;{f*pTCGVKq+{!?xit+#g6$5HNRGGz3Vio-gDJWb3F^9iNx??c|J=?d~S8#~s*D5>6!k1u#ywiJIdRA0nu*0LGQ-6syf z6aT97>Jqi=<6qtRh{^rHBe$dOOHTvuy|1k66 zQT5)^!*f>L?O*Z?;}&J`-96W3aLDoXM|Z$Q}Y@teU}W|3=0wgxt9 zK8y`WIyxznje#8P#n-kU?k}d|3JNJ{B5w&+I!FP^NmrH}Ru}#EFzR?Ah3Dlk@Uc~m zpcRigNTzBR*hDe@BVCrxu{$`Y4B!*-dHmzB=T3z=`^~w`!*%XSNfG~?RCdIS0D{m%NXCFD0|LORI>>aHi zq`K3#0z0I?_WkSLKZI&OW&2;g_{_ykhL|~Nr#j3$JTDKuY-eEyCyH@88yt#fh_qca zQ|?_>7C=!P4%$f+YaH7fJR<=lMGL3X9Fjn=O}XmNkRy=CjcQruk|ROFi~AmWiAy<41y4vc8w>qM3CMW zpi{@Tl~$zKZGqPx_zOLoiN>N_u!lhWHIBO6L;Ewov(L-X7PiCMam|R_7IVZ=%M|@V ztW=^4su-O}i?NhiBp-D!c|y#ynS2=bH9tRD@^4eLG!G08j1@;mi`|_a-JLBgT31po zNK234ly9PS&3S7kf5K*TKxf~iwi&pzEy2VV3Q=H_{0=xc;dk!(TQ#lPCfg4C?##Up zRo7`W!5){q$Hh6&3>nMpUta&Vd?hwKy^O!i8NIf){W2=l2GM{WrkBYjU9bO7VYPN3UQuZif{{i|RWM?uX~%kZ!!qV3*}1Q8QOIuzIk49jC}K9ADWwBAS{X3G#> z$PB$)VlMV-DrP((0EZ?ZgnCrA>~?HP`%A3FO3EXwiGOB|ceT8<^q0HFQ7LmD@FuPD zUhdS!9n^Zba{+&Q8Ah>4tF$+kZY3!uuPdd)HO}d96Na7>=Q3F^s|lq+N?b)7ajTq zU_BjHiy_{c*0TZFez+)L6m9M65B>VB!}}re;;`U0NNk5?aB1Nel5L%IEy4H!+gOQT z5sll0%{KUU`khQ~M^9!q-Ba7ucC~he2B{ls>;sD$3kR|{ehBpxkh1oPh1|H+jMm{2 zctlQS>OIwZl%6_VnCW97JcszCM9>l>Ctn*);qCU68dl|&WK8_ zfO@Vke+}4jC<&VlBsq=JEfLcT5HUTcUPpF9p_)VjYEqkwXvubuJ}}bm|XxSiP(l85%5E1Pwm<3Jcx>^zoo5VutImpi3ltVlomAisFz_ z%^9~myHf~VJnPGer(jd)6+}B49hg=R4VNTt=}Nq9kI}HlE5En2{Y`1Qdg8m4@ZozyWV zAof8%lVo?Cb{(WCgN^_biVYLzBM_||HZ{cKU40_{1nVme{x1jc|XG{-dPmFZu-@(pQMC3Z_%75T7;#lwNnrf-lJj(G;EF zj>OYrnFVdI4J$$tFLs%NyY$dAoR5koO~5mAz%2TvR|Hh zyuQpSbM9I|p##_wtPLYJ7vDS^?QoxN|-5=^T;!_x}N=xHt_dj>F}4 z$%@-#cT{p$zW#YevFpI@xq-AFHoLDpeSS|bql_yDGoa-G_7(7Z0{$3OsB$f!azMN~ z)A{nx>WwOWYkynF$`aJOn`mje%y%DsKOdVR4qaPd$yTrBI$c@@gBiBlebx{Ye>ak$ z-^mM`*KIOrwAy5b4Mqyk0>!(A>}EI8J!Y6vV@`chII{itmghIVkd`X`d#Z8zZ||%> zvsL;^cCPV&^qmjy{-5c~HwYi!Jty7wq59OsT=0nDqwoD`^=$5hab|Wd`p0M9`Nc=i z%~bHQnWhRpes9yqe^T`C$Qb!Hd+nC-y>A@J1(SeEd$4&XJC+%y^I5AA!t>a_W%F!O zkgkXRKw3CF&h}^W@jRU`7`xK!uHmq7hCY3K>I7SH6ZRa{kF~U^xpqDXmoX;jAq+`# zm&elDo|TXb`+F@v0UuP!P;z1!}eXfo}GI9?|=T_gI}}K_eyke8&koL&NQvQQC0g02xA!K zXoHX~BBWV%b`TGqn(NA?cnxdrf&QBna^>;g^dHaY{01u|EX2VSJeeVu26?%J;n0>% zKe|_=gUNsm(F&;fNIUSU5dgdX(n}3$7M^I@*s~Lti@nj*J${>-f-)OIsvzWBPc?2i zyoO$9Qg>|Wikqjs#xQkJNktkRw@=j-IjlDrfER> z>h@BFUg*)eTwX8g;1%DPZCW*2HU1D}@2~S#{VvS$eh6#Yq;E&${7bFjQSHOL<#FoBJcUw6fLI`k=%AL+{ zn8d7VsT|8?&D(|;d7I#l|8-HN80J3H`MoE8SbpCMIExN^Ps;+B_D)Pz%4y;Q$h{VG(w z$$xGTes}Mm{vzGD{;wa-|K%4?NcXLft{ah--tp0$pH#S3^>Y=TRfDpB)}!(X&A%WO zHv|pf*VxO_>7f9Ymq@m`p6W+_4GOmzIeZ`o`>7WMvE>s z;|~MfhKN?U-{f#xo(Zgb9))JtzB$yP6Y!zXm+mU9umJ8ANSu}y1^by`!G~b^^4fRJ zq-Ovk#)ot^D^MIDK7zOwBzXGO>y=!_sZMp$I+bmAV@5rxWe+K{8~0H^zNu7a&~1~h z2c*9CBS&YZt?r#b>K~{33j^omcPFg8&yQ_oh7hcIsA?)b4^aB@8 zdKUoId1+JW=^k`0yTj@aam>iJZJB52|GH=Q!&bi&Mm2*mB*8^2dYtw$x45=u2jv#F zW|+vpT!av!Z9cXx_TsiT>7#GVygAo8zGs)RzRf1=JRT0(?S@WcPy2m^59en8DqRCf ze%$rnq_5pqf_oPaW!+dT2oZ;h)vE?%fApS{9+7URrT-lHE-I>tRU@)zTedyE+0q}! zf(p)yai@>Y77LS;-J@HpcQ@@|SGa$<=M={8%+V`GWBNkyc_oIRROg0Ys3S@yD zR@Ujp0%+rG%d|M@O%Vq#p-(wiJz_{rymaR1TbEvbrD0-d=&x$&JA)UF6~}K7#+nbC zepUba&-b5rU;4^m@K+DKwPWGpLj9EVz|t!peB<4>-}?D`=7C+WvK0Z9vZ`ZFH;|^X z#aK2Lby`A(6Y%oJ5xPGZJZG*>H|JApJ8!H;*SrxAJComSOLcYG>+>7?|f`8PIRXq#rScNb?5 zYbNqkZwmMvuiNHj8bS$GkuHjb)UaxN&5F)v*F9EjNVTvgv9J;pR}ib&h-H6-%0(lQ ze7|k;51+2ti0c{-RVg>cvLF|R0&Fr;?4P54WRWAZQXXv?|thx z5ma2U^7PXIB!vJNh)i_srw@(q9~x4}j7n3p*}x)EWYeQ^5{U9_sQduPjc_ogLRC}O zCO6sEuLj|6&(LK9J7Mz_Ewo-RDEE1HjXwu;y3Y!Wb>3+;U4JXux$(O~`va6YEJS@M z*D->+)$SaGF>$v6h0~BzWc&#b2vJi5_qx3c%i93F0z$=f=&F#rLkXgx;11eR`f)of zaC|4sa10a>(L(J72em+%I|k@1KvEQ@4dSLlq>P9mnysbBN)doR<11eTTJ5Z`?nw^j zX~dh&-=nSajQ|W2ATDW+pY4Qv6PkKe3&VQXy_q0P+1Eyvd<%yPSk(jxS= zpuNLZFe;qD7ms>rJg6_A_l2|baE&Qj(A|S=E)Gh7gp|g_2VWGguDKze?SNQ)fQjUe zL4>}nU*CF-OIou$6rX~Hpcm9GryF9O#-)BnjE}*?4S6ya7jW9q6vWq;38&}r^Z@O% z4mbE#gjmXiqGfX^H;#s;tEIXtPb*N2LAuWFwmIyK$+G7W=&gE2{qy;s zXG5tD(9pn2gkjgao3pM@mk+ATUR_@pcGar~)f4IwAoL6Bqa&e1H(Yrc_Fe72=onPz z{ptbrU|w4`^2(NNyg*sp`{usiE^nJ?{(rLD0S+N-#bV#|z(i)Guwb1v&$t)550^=c zT>lb_{JHyr6$E8Q@ N(n}Edg%T72Tzg#+cojv#6|sn1NN)GFAPfSr0y?ztpl}0^ z6%xW8QEu-XR44|2 z!Y7v3usg3iB{>DFt5w^MsTe0Dv6igXwX=>h%bVND$$23Lk3bU8kWC>0Y#fO6jwHZ( zhjo|ITn`H=KtsEE8WO2NHkw+9A;(mSun9+us)K|MhXcv~jCQMq19=*wsMSwo8BkmU z9hYocf<3HO&S`eafu|tDU~kf8ZRxOqF6apN7K%`2B6|=lMnpRwrNSA% zmzy3*Z&i0`Y2FnMz|fw6 zA8oKAFGC5+`&dm{-e->R(u(CGpY&QNaIsL_t0d>Z`}H)W?6g5+RvO~qc82=;z*L1` zDE5XclZ%?XwqjWo_5_G!G@6I5m{1Vn2F41peWI}*OplooN|vufo{1pr<0)Uk%SL>I zksRvyDI;UoH(F_zSqLSLpA03~d?fZM>H?x3&TJK2ey8k6mX-ap?jzHR<#A zoqrPEsN>g`-oC;q#u9ekQC0f#`bO8JKl=P{Uy&YLD&5E{Mv|C0*59)yQFc+hGyjG9a0aq>F%i&`vzp6^v_9ebd6x#E!P>E1JlR-ey zpxlz^47Y4oghHY}BifVps2v1HY*>9{WL4x2 zpS%;+T48Y9xCqiMA*g%U?0nP;s$BW*~mCF)!h2bb6 zm!?aL3CoUjvPH6lCl3aqH!BoeNx50$_oBLiaKC&SugRk{lTj0~mj7V^ zUDE6z_r;a}jV~Y9iuwTaAl`ys91;VSG0v3se4+p$lze8$E?XTz9$J_@_;%oEVqfx= z;r}GAq(BIfziLiczRVI?(j&SEYVC`CJiHd#Hvyy1MpDdVY(gWR@+ria+Y@2E2_frA z%6VRJo7sR#FnG-JyGrefR4C++M{uTyJ7Plm+U)dNgBCA{+aD=R;B0fwkQq!;GaUPT z2{7m0l3r85(+Y$>tI>(a6g?qV%uT3;k(j)Hy8`naoXf!G4uFfv1ITERZ+~9lH-iC7 z^TY_v0FySs4LN`$K&uhC^v%42bMSamAua%us1TNiaS>0>k;bc9eY~jPVc$o^d~pHq zf;6Hizxb$vk2w66s6q3s2w6>7<(oBNhvKR{Yzq>85Llf7E(|;!;vTugO0>cfwfhZW z!WV`54G(iPUViQoMG!<-_&CKesK?=Ch!+sSs|xV)c9X&ZPb6Cuq;brVAub4-qkMOp z0(#9s5WKMZwniWW462&Q6H1YMqeX#sal_LK+W|hr(O_*#cYTPTMT3t|hYF#5(2=sI z`3&rejaptlRC-$xwnc$Hi$_r#PVo^-ln-+-9>WJ?N-E$i77xb>^AzlRyd551VqqKZ zeBYD;Ie##;Y#}aeBd-FVQUnZo^x^6e1-`>@C~gL|)9iIy1cwX!Sx@O!#n{2o7so9{ zV;bbFZNqVj*eqk&hMt19mMuG76pn|eK3A^+$#(oe`dOttvbGq#k!C&fOsB!L9{(NExm7J-IKK=d!~6doE9UP0UDE?kr8TqWN50d zXaN==3N~Oq4l7PaI7Rh`^G9aK+vzyb3%stXhb^1znzw$&!y z2 z-!DH1J*k6dwyQt*w^`UW!dB|L;j-nBP;xAMxXS3Xdn@&e^YO9bT!WS{&AhroEHuYCO1BI^x1L0dkXy*zvVMdT>* z;J^hv0jqw^242rpuWA;MM7BqeRv}M}){b}~^x+L92Ehys+esyr2lmj$Hn(})O4Isr zBW>V%O#5EtQn3?BfrSJo(O;I`_$c%O^d;yLSncR144+u@(rOP%U%P(P1hR(CyVq)z z_i!6G?V#7|U?t{F^hIM<3no)s_ZAK=M&3w$3a%i5=s0|*iM4qm;?SWpzkX}~4lqR>7Qz*&BApMVuOF`~*-F;}I^-ma zs}-_EG898L3nF4f$MW96Oz%9^+cncx*VwGo1#BTEROp2Uljv4ytW9Rp7NiTyWTu|h zP1~sY!j2gwb5)}eQ-lp=A_$+#vG&rqoAfnQd$Fq!28$8^LU4!0;e%p;IX5i^;v;f6 zC<=3QC@F|xHj()AC((c@5uk|9DRg(P2?u!ONZuKWN?3+8>kYcM17>jY`;p0*)8D7LoYT2*hBq59(M#+5%Rj z003ldqnYXAAKZECJ`wH-hC9Az^)MckY5^_O2w6<>i_rd99!BjLKxv0gFquSmG7>}@ z*4VD*wj|FT3JDj_=G?YZSknqX3xt9U3V2@3yHz3Cib|O$WJr1s%76E!v|UGEC!p#uwRo8fIh52O0v@DiS^!|TR? zct?3@#j8CW>+G|^#T*3##;F7G5S`e`+K1tKkKBd}X-Z_)FuQ^4nZth2ns+fmW5fo~ zF%XIcPA0pFlR0~NY$EjyTSpYt*0N$y)K(VbWL(A&iY)M1{g1A0xCT2}&dE7Us@6?T zXj(ut)?+cq@#(lx=y40Yc}$;K2xf=FtmuOn0itmfG}*nyasA+owDMerv1eL=?f`7j=)cW|B=|u0$%}!=N9woOfs_x53CSzA7A z+3RPsLX1wqe^hU?HtY3zl`3l(9-iEP=ADgwN`1S-pkp=qCQYMB-ooj+^jGr>L1I6j zjXEq{Ee=lEo;gP1xy2~2R-XUhq@VE)xP$cX&i>-pZ?1dZ2(EvSs6c1@5{*=A`F+W% ze7$xnh8?^P4vc>-)j70hGTE1fF<9d<6y?NFItd{eZzw|6q&V|3F63!4-x!9&J~H{w3WcpffSdvULv0zcKw`{ILrnX<4jiyF5R>n@kA zMFW6m)FozK9ymLtO6ptNy6je_Tt5Z_8nz}!KYTww!x4k9r-56m*LKGIS`^fg-=ghS zs0f)O59_F(2Jy9kUyD2^N~>}kRS%8&0;UH->%oqAj? zb&Z%uU6&fvhoqHDZy?@bDmaH7I=60E^@VfT=)Zl#>gFr%c0B#%*f7y_KzkfMsn|U~ z>lvWO^Qbnny%+v6@e=*>H@RBr+N)p)ncNk9RS8ORz%K^agCC{Fe^-zLF6xJ^Q1^K! zaChYhwMz4nO4@dux{y7Ym?Xa~!K;mrWk+A5UfA?n4fzG^rGf=MYOFTeuBEgtK)D!w zeSMpHw_I0mudXrqdyHj8S4OCrKNSpsSRTM=VO4hRV62&1V2n^DZBhRB*s!<|htnPD zK3|q4^9zB&oO~b~oh(v^cTd*UtnFFNnEIa7qk}D4`sIkM+t}dlW;|w(5tSEsJex5A zjc>uFK)fFhh-MicL$_~yI!tyPY5~&=Y(6qNVbatm} zUwS=r`OvASjy!c|-HJ_{3Xi9nnX8(z7$schAHQ=L3A95o>Jm4)3lX4+(G5PVp#WlX zxN35LhcT5+o9Ll+Y7H4VWy>mMGF48Ma4~PGj;*&*Hk$xaGv;^<66OtYpv+o%RcpaI zfStv!VW7?bwcw-k@2^tXP<3Y2%^?k4U1Ee%CHo`K>kS9#>7UQO@M2xOt5((7ZBFPC zHa2d{csWYlZB*@S96fsR`4bl}%{HzYVd5P_TMI4nl={7!iJ=0RgGj!+nEsAE*(dcY zj5d;PO-D;y@SwpQ;|Ljn{ceh#Kld(%3# z0jVrI;N4c<2L;3ncip_-fNYq{3O!n;^n{r*?k)YNqmxlP9l~~ceY2q4!L}K!`kF4e z$K9x2Pxoxhf@eiQpkH6KtP%ohZt}e4M>K6}?y$7UOYeXFCX7@Zu&eYBOAkyX-)x4#cPot4 zw)b0Tlj?B?%e|xe3Jez@w@PKTX*FUE7+1+E$)o7gYJ_7~Zz2{!?F6|Tgcn#G2+}b{ z7_vJts!yHL>1;Z)vS3IDh;I}lwSRt};^Ku12`{WM%=jR``V*dWlqI5}1@S-9QiX#z zSWz9ax)uOPAEp5zUCBb^FyMR0yriXo2xUsHMgql&&G=3M6n;U#1=c8g5a%0*YDieWqRL^ zRH`rNrec`UY9jvuhM-7WP2I?Y>}$fdmg z@GqsClf$g^we!hg>D%$x4U+Cn=*}>r$2%;v0bEdiAZj!VW_jaR{zXnmvx6u z9l3DfqZQMeHa)H~G{d?ScovAEAf@uoFAlSjLyj1I2`tQ%DPUrC4|iy20Ca=?-0a^E zvner=?WHoBJYZY+{Lro{mB!>^t5oZ^0&6OW7}M}fm|NoU(+Q0IBdS)bsuMdeTDj<6 znYwVRn^LcOP-Vl?hslS=a@2mrw($GrH8{`jz9QEpSOYm4j~DbE;H2q&Je?$iH-+HPEdAsCin(Delt z7x{}(nJkzFcr1>kf*-dMGacepRg*ZB>nZXZ~yCcMbK0mtJSMLV2PSTQ3tD?Soe2BUJgMM z)G)$6Sj#gP{rekOG)TvSHe>UXr8}xuvAkjX3Rv$x|6NhVSp3MH(J#O3X*tf$cBi%DoZOzxx>L~N z0EX&n9==NVtX0YLUh=?KpK(*7W2_DObxXJ}E#WGqI!UMKcW1ggsFselPNPzso+wO% z5BvFlUpcR+@o%=7=x%+guOBeb{(`yN$CeuZ^@zd)PeoY#37TTm7Z^)1fNX==66i(h ztZtv#eQT}|ik&Nli>5B5q@-pA92Ct2Z{Uu(?}fA=cY}BuXV7FE|)Zw-!Ra z`;y^6{!}2weq1^U0nB!Yjq)iDF0%c7A-XS)LAh4ds%aV+pBNbmhqCH2+MWddkIJf6 z%A|*{%qrk=md^F%=vIvTyPTz4%Yj+BE4gyCS zJyzXDjQn$_3;QpXeqd|dV(o-DP@jn{9k>^d4mJcewee7w$^M|#?sEmbmm}UJ15b$# zh1tDx+7ghPL#x2sjRr%}G3iUS@C^gB87tzWFb2DiIELLQE&XJsVd{uqQRzEJCmUuyk(LtUF*uG@Y<%S&u42je zzb})1@!2{>z}tDck=E6Bb~K*u3b5|$?p*!MZMR)s_YwYT-PF;{R(z}Kc1|@_-#a#N zG7R7GYwtYs#3vu0yZjOU>KNECJ~%j$pV-jvV0_nobor%^KYrrOoviP=u=nJ^I6m@a zi@8F>R8MoqbBGnL{nNV3x1nZ*Yv1O0x@h$vnZRxwnuJJ%3nJOLt(J~(u2q)^n< zBHEL$UChno`*XeYc<+u5y9Z$<+sJn+l@#2;3dO#G@d#>gA#aEtINa0RqwTEKurumx zx0-6%+Ky4}+gL)|v0QVolboinn>JW1yoKd?3umCZ`!tgr5kW#lwWED&tExK($+kLm zr>2K)?m0Y&o(c&kq!24*xJ5;$Mdq|GWIJ%Q0LbN%GgfUj4_G&t6dE zn8roper#^OdjAc= zg8E?NiO~Mn7o_V?s$s46rDMlVNdGbV>ipD!w&P7x6_N2zDy2PtS46@N9_WHfESj3a zLoIXkXm2VKBMq@c=12MoGd(H;A+{%->p4Xq?;lD-)Mu@15eM`KL~RL`C&Y4@f@z4J z>dR!IauoOG^HDh%NnVkjJR%dF zYN?7PSPvSv?b}Q38_-6uG)2NxMtG9&axI$`IC#5WN!3lNa>&sv!wXA7z!NA~pdZSO zv1@+Ey>B*~>~exk)2M8g6_j9e#aa3~%4KuW*%_6FJK z|6Qf9IMp^K)s?aLF3isyk*+P>9B?+T5q3V#Ae#XcuGI!%=!>sNUrR|V?4|qeS-pG1 zhWep19`>x~L~)SL_3^NMvf5m%*=g~Ts@iI_+!eO;55>;CPUjCfsVS6-iHR4_mhM5` z{g#{7R+j#sS)t>!`X0Jnn;nQAl-B*c*QeHO(LU0?hrRNHD|ac(V)YQT-Gct`y!7bK zl|}%P+rIn9R1fp7YcUX;Oa{A&Hui{p3vazMlMSl4+V+-~CWvzNTe)`WW`#*_w3%tW zF_E15;63SU;W&!Lt?E_{+osvm(%mEfth@A6g(dXpA2U=sl`R~;v|^9W*41e?1)!PT zRQd|cB>{M(>ukxhKwyOGUkg#WzEo=FwYxS$63S#{K4+Q~ZqXBsQ8NW;?cwR6(hr{4 ztJ<`yR&!v`#+3FQQh-~Hj-szkj*h-0EtwOCoeka1KTs1t!Z%!b?Nt4%-BS`XefE#5 z#)b#9>KXML$FfJ>Rxg~aR!j0>ecwO&ZxDXIf5HD&WcBdXa-P6+jN7Vxro+b%P z=Vf1)Nk6<|QH=EWXL19o7K2@DghT@;8}Dowh-%FgkL>rerLVx9 z=s9Wpub0kDGw1#wQ9}~!n7BoIWWAEiRHS|Tg)s2*kjPm#(Kug!Q66zPAl6a(Qfa5^ z;UBV(!e$G9=c&^C>$NkRndfE~I*!uPwP$9+ACznUoEO=xFg=pDkwthV1~ldQ3D>dS ze(xB4Sh{vzdYXM#ymG@NS>AC~Ckz>Vis8lf{sh!Ck>_FJ@rn2ZHN^KSHCBg(aYPBs zM<4u-r!OJ9?o zD7Dk2JHWwP1{10qe^vUX^!-17@{+Xlz^32+SJj>!Th_6PRrgqKu?<{?DrS#oz z6W{MK3^0Fx_O%`Y^4 zVGoUwf03-(S?gfC3kZR#1KP=T0Xaqnxy;w2_3CK8-QnzD9qkOqeZIb}NV_m6ucvd=nLjJfi{mCcHX#~TaNnKvq7&FXe2e|F#mprW#+zml!~M%aV? zL8mUcS?;AI}f#Gr)EKx6$koJ}jD?iVEgWG|d)0z{wIq4JWpI=<6 zaQcTt2g_mHFn-j|u2SJ=5ALAv^rK}L*sfg@(^mGW4uuD%l2BvB>=3)O5(l`QjkOC| z2eYLSn>=I_mTdXw*Fp@)?J)0(9x^c7cafveDToDi_}o^=1i9>;EhA|=Q?m;d6S9f$ zfs%)7!CCh>YqjG(57V|qan%4Cz^FiCPU&!3aobukWnol1$}fntb|7>>4G65@)+tj# z7o*#DbqfXc&_H&;h`aDO_)fUWVoCUhFwl8v;~8#N`uhGiPv_O=)Kla9v7RC4$qz4_ zFaB*1AW>6a@x$};(nFV|>nD#*W#0YhQbqb_KRGYGrx>%37KW&?_C!+;pX$3L-6lQu zVF0X7WRpqhqS|58P));*{@idR*~^Td%m{t-x!={Jh_LLt58eIf{bw(H_)2_YbX^y4={jlAN7C)m_e;wps>GCb z-CSC>zLp`%XD*r(;zQDxgm+(yuqVXeTn=Lcq%nb};9MrF3#i!u+|<%Ai;pYA7KUqD z527^!IC!eSGzwf^Uc(vMn)2EtR%MloP|FSg-fp)vwHr*$+nJ8g=j|NzwEuGHJAb49 zmQD8l9@EFQUlNC*pGc1mIjqC1>F7-Jd$hC!!VPyyFH1iVq|ZJNcibyzdA4z7+xj2v zk`r+_WMP6%5iB>BJB+b zkQl`KC!0MUtdWu6s9cmktMGU@vyOIJP_XDrX0RVrd64*LgSRO>7T)CIQK2LU`Es$O z7h)zDS}GS|q$VXQ*|m#4KYyiOQSaLFvlc+{d;tNbf0?is&I_!x)vDOx-cqY2dZ_{5 z=|3hzUX+(EnG_w)-5WZIeU9IM=J#0<1FMHEeY;PwV@ox-5J=IT{3sdp*)7bK`%C8) z9;2??foBO$W#a)Ku1ju@`MeWI#O==KYScIpNNeZ*CoOudxa^f(r68Og+6+jdx={8U z8Xf`RhlmLPky@&kY87hNuJzsJ%Lh-rpTp(txY?U;0!F5*q2}ssoj-xfEr=Xw3>Uj& zLD6BWYw9R(^1XC9Mg*&f%&&{uGp?|@8`oA}-SqOC2~n_;vsILCP}p2Otqr76{K2`o zzVhjah9{N}S{SW$zPa&v8*rO{{y)35S@kg(u0b}T=3v9~fvM4j4~GUWww-!?$}+cq z%Jtgm(?<_fB<|eMT#>l@_2$nGe?}_?Q!kjaRAF5Z9#5ds0KV>LqW;sMJjIAN2n01z zE+lZp+-v7DU?7JLjH!Mdk92iNWWD|oe0Q!0-|c8=b1^+GJ^a-;K@72Je;%}SSBz`5 z{G`ds*r9)f^H?Fja@6fQ(L<|+4v3+qHf%_nV_P_cSG62KClQp!W+T)~8;-19zi#j5 zhu^WJV?c){c)v+x^kGY?AJ*XmvvWh8b5oVCm;wVGAJfOc{bz& z*IWZv;YBT|K>`{(0#Z+9ju>RZ)vRi1{Nlm-br(j1_m<1rXJ}_ zP~~<-BO;b4-CeIxsgnbjUYVLr_E{Qttlzu?gn~PtZZ3U1tcZwWGNF&HU%iv#+F7@q ztTQ!SF?!%=tRFFD;?B*@#n3=#kcw+#EsV;2jRp8?*4KN@%;vn&&|@@rjr#E&gClR@ zDbCKJ)>1xqm(qaPR~hC~;F~1wtZoiE{5JS#I601EG%ANmOLfKUQ414<-8yJKFrmk| zNV=QgZhXpd7-92inu}4m37AIwjnUe7DMQUw0h1}QQQgj%L zP+oC4Y;6!#vN%y#_XC>6UfMXgy`HMrac6b?UgMoBtsS93CY^pgMSZa5gObd~eCodE z{YU7nN{dlXaM^fswuazTIs}(Ewl_PMK29G_8nHA?stdt%m%K9_>q*k_KqwJ4yA8dp z3$!>mS)ziFG>Y0NgM2n1;URc1<3$J?noGBRZdcUKu6q4X)CU(YUViQ6XP((n(^$QW zpC%wPG`vKdNF@$eICuHMVTkDfWa z6N8QB>WESwANpcU+4SzFQ-b;rUyLhBWSaWaXE3_l5Ilb1STEYgDb8)TjSjMev$m4@-wGF#4 z+uWO7J(PM-h%oWvuz(w!X~#GNusvTB=ILj)Z&6YQo1IG zg&)k*!((b-g$@bt<}~A`INLC0p59Lljg3#u3r%HD#R7Q2@ z>iSn^lhMA3!zb47U@E?Izp<{Wt@N=XViS!fPQQM2Y-g;U@u8&Vpfuf_WiNLWDY=Sg z$$mw!)iJvX$(QnF zy88MIeRN+eoJwJTq;D}KL}E@Z#%c-$N0#mn#YlGR8{|?DT|p`)k#smC*w>bRo;yLm zwJ>&Yo&~ZJ?j-Rj{Bqdd?y$PoD95~mBy9q6Cdm7_1FT_Kuk0tYBN-HvV}2UeuRrfLH?BIv~91Mv# zuY)fL)05TD9j6W_lldf*PdW`n#We%ML+N)2AG##e(CT;P4%ui9`<)(;?C}eNWV8s43vzbN~`MW zXdZ2uJ3M#fAQQ4ft{RSvP|wLiUU1^r#KK(7NNY!zv4gEx6~PNuCJdQ)2rexQ$kiY? zRjk@*Y^w?d?PiBiy{V;o_}Dvt9~--T`QbIVm50|qx??9|m4gM9^y1tF5f}2{3mx0h%;a}s5H<`G28S`qg!73&mR5lMye;E zi~)*)vI59gWicRaQ``D`P2p!PM9ACm@I~BPXbAk+e-yHoqnj8gv%DcVckdtQ zmj;T_B-VW>))Bgw8v(JCSmg<3E7dk$zn>_Ahv`A-mRs(Cx82f>N5dT3SFRUR%IHQkADX+~X)E0HwE9>D9n2Jd^W?mhsh^*QkkcJcwI!oWzQ5CMmoH{A= z9XyeGjS=mnj`xZ_TLYj(@7EmsYb=wybj-#S5MmMp?QpjkOA<6nl&VwJ2-}Vex2l7_fG%lzoe@ zOMlZzWNfs zI#t$ILDFgQW3tj?(p@Muj=R=U8hveZmo;?q<%lPV!1IPxm3BA-0{9FU%xM5T_H6ew zX@!B}j1WL#-wH24Thx<+46QInuvsgs;un;g>w5&Cb#bi97$v~=;0@d$oB_RItTwTJ zGApY!tvfn}Nba;C&PLcPJEao}tJULyAdakZ8OU^yaVdL^pg^!J(jV=epXw$ak>~`= zzT{{H7m1aA1Eq0i$bn7}hS+`Z7;n~Sc`cSEF&hTBI>MJ*@$r+tUEZ449jHUhHkP-8 zZFjoNnY-b$?~a(&Cl~gW*HK5lV9&K3xMAVrr4!ka!MB%dh-qNiGVq(9y*^G%11nbS zTk7h4YM%_L5Qv(hC~@UoxMRAI$%6q0MqUu>>|s92*=-g(%DrxT*>uDo@Id=F;frJ4 zX(iTRc0a18pcnHl+ei$=b2nKa!>B0JYNM=h>au(Mc>{w%54cNtvCEHDBk|H4!op53+_zo~K zFTM99HFm8l=7J~3G;`$IQ-b6S`?Ia>I6cmUKi~<}PVbC!^09VueI6OT|Jx*&+3f-p z^L!4|2yCdqn^R7i!IqD>is-)3S#U6xT`7)kai}duxCzEEGl^^v>L6G-#~fC%Ty-Ni zMvS?*fLT6%t>A~%A4#H+KXMt;He!Ex5IP@l-wOA37oZW#f3c0=Xfj3uVFn0{vmI(>JwI& z7r@^PJ(nw=dzpwYCrZb&90Kkyeyj2r8tjxIuECn_|8`3OTgir$eIf)ey@WY~xOoc3 zeFbtBuCgV@!p%oho>kh?^hO&@Pb9So;LH zi!NAio1Qx!GBN7NjUXI^(jxpE@nMk@%Q$K92rLM1A{wxZWF~{2Q_=PANpIi9^TjYb zdELKOmShT7Qb>3+a*Npw*H9dTJwXZt_bsSJkNe`-D5#+^@V2VRdy@lpwWZXeAd34z z>C08?8yj3M%YDzk!bGGS6(f-((e^FBU{2=!`}z%yjX>=F`%wO&Lub)gI5BcoGHEAl z14mMz4y-B3*VS7GW7!MuJP$UXS23Cdcj}SSSJ&Z|{m~cy_zL@Z;ztU1#uZIcJfQ8g z8w@T&^IC#?sshT%qlkdOMINHE{DV6tK#$wv<$N~3BwPCXPT+J&pU17~Lxzxn{0L@{ z)n~wilBdRoxF_z4y0F0?#afbZuw+Y+8Bu=!3yw%oBy#9&8=i@0Ru`5M|+$48oo+XoZuhHv+FG2m%w5Ejc^6 zfI{L>@DlRi;~H%q7j%Gmzm}&0Nzs=i5A`(=JY+KWDRAIo-UwszY6YW54&sf^%p?LS zA?}e&?RP2cDOZS(+dR0UJ7fy+0dv@kpu#J^)2|4d{PqB``GXapE#VIG33=(Y(p#|L z16z-Wa;6jXG9dYVF_7CrTtt4PU*QDl3p6$|=2*clb4DHVjoTIIj}|k9=nA|Xc}$4- zqKuJTEh1O`L170q%$70QF*d?h4?`CxAALy?gy&w!77IlK5xCMhg0{H)*5}}n&4bY$ zRfcT|J{*NqHf;XPX*dH;N%IPGNDJ|6GvKZcW!{r=B%J<4ka(zl^duqR!GaK8_dwDI z9ikHhax?&8c6m;(fcJ;PV#yi46-F*79FpfYgA@s=S$G+n;x0dtgs^gcR~(2vd5M-- z1*FOBR!BqRB=$%&0D*J)+vgOnAgGTb%$^-)!bgOIX*2@lQ9zz(SMX58x7Y%9KNP=W zP)HE{^5NYI!o>oU(`9w?0I-Xk-x-0JWXLOzZdAa!%^wMn?amO7YN^#uUOwrol`;r| zU^{I7eD<`x;K&;saG>TRhNLEfhoBQz$}Dj%Vu%7wVX^YqCB;Q- zXlHUpz6zU-CWR$p2CWXVg5dilIQT~LXbvQmmhvzdbcQV ztyX|a=r_YO$6@xEqwb&p^I7Ru$)gx+Ik>i|8<`m>sI+Y}Bc&P$5#SI0a8)wd>FzCp zomTd^3}q(MRRXD@o*Y@FMBpoXqq(fZ&chdZ)l#6-6zA7lc3jLdvMm@o$W z`o=BPnh`F?GY|~Jj8q=Y$Twc*hGJQOYu$u@^7g%Z*HKT+Yx^00mcX8{Gpp6~XsLbE z8!yfr9GQ+FugQxT-5ZU3C)Cy2N2dCsMdV3Mu(dP;O9pX41Kp(#ADJB4B8lbd`0tn7o{b$#3*J0Ck6JU?e7p*WWUdJhU)H4@~Q8%MFUh zy-8+qaW)f^hLsHnzVW_dBugJE)M=YlCKyL04fvXL@`Xa*_&hb;e0CLM+h;-Qm>7t? zQL0urGY*(c8tn!L58@nzZ?)jfT|g-KxU~4*%kj6QWpC8ZwMpMDUGwP;(*M2!?~ z6Q8CF!<@Fj=5@o>S%=(}g!v|2Ar22`r(;P|vLOTi$j+cHA-BT_AOHiBP(L%~x#s-L z=*zj5TpPd>$k)5IE4P`DVS!M8VHS@cO8UUw9?&PXHC+u`Q3Xj1KjcvEe1@)Dx3KW` zNG=m&|8O=Y7O6p976{|exoW{svlp(0AiUESn+T$C*AWvT5C8`&K{6S~e%mbkBBfZ_R*qzEBK?dm)Z?jk0Cy z?tPT?y5%b(!H0`kx(Ghp4OG9vmxI0IkA0{M*? z`zg(c<;ZV=@e#1`i3FufYe6Uv%AGhj2A@F4MjCh`8|hBcwn= zV95fT4RxuzurIq~R=k_<870}5_kF*6?|1M0?oEEjBaLRx%$zyrfBxrRo`OeV%7~mC!QmXPrLh=b1_`P|@9ynbQgMuWX6W$T!N4}?>+(y7g?)>lqaY5| z=MB@tZ`FO!A_bRStx8{!17Co#cy2kRS$nL$mI)cFPa%I!XQ?$arHIQc!!pq2LH2}7 zA5&4Pa(z+Jo=w|#w05D}!AAt6j^p>gwp!OMsRc$TK*t(3E@)gt#een8(pj4tt9`W$ z)&gduv~rzYGkeRo?R2*z5)4sI-t{%W+>FWm8KsW83ZOOtd=Dr=jc#ewQ}1h_Lw#>u zct`r->%(*A%GVZ`HfSCyCx$Y*!w{i)0jLiT}a4WEL z9QAc>cDl^Y0a{u?rU_-Q0jNS8a!zW)?0FeKi=jFM{YV&cg-uSl#yqZ|Cc0&1{@R?a zJp~OWCSY{~kFuuRUORuy?j0A|TQ)C4lP|}7SXJh4g1HX9!m-DJ1?+G%_aOYQckMijU2Za0?!Y47aZ>N_~$wo;M0L)i>4IFFm|>J9B^?F~lU!3LM;fUp15 zsI<2_q~0nos|4g4)J%?i)EnMy|0aINLt9oqsjvf+zSbKt!K^HA+e)dcwfP(S7acS( zZRR6!qP|*Wa(k^_s=1>fvO@(w4^tCW40KBeJI)@Xe;)sHisabYj=}B$MNO1$s*G9M zZK6o5quFQmn%qo&*XB@ut2$Wgwls(i7#8(!r1G`Z>aA_^MgtQua%LYWw3_uZ?YNo! zTRv_U5V%_2z1oUQgGkaukJB z_PmZ`%vj3L<0Z>V&JK1r4S?FEvB?#4w2LAoF{Eh$tDY{(*KRJ)uT`6Ct1O~bhTKIP zrTO*R$oA&8M!*ny!T1MMDWhh+eI|RyXCwPRY_bQVfuIrek(K`Dvh4u&4)u=ao?7K& zO5LxsNV5@n%)n5kl{-rHhUz2R%bF{FjM{4q2C)3~g?E2r$IYxB zc~Vhp=TMv=3>y7y&D*6BZGHa6MY*dGb6FZEUa!V$GFy#Csl1^ivZFoSpsAZ0 zJX^91ezO-rTneHrzx+#%DoYNMN;yk_FH8B!+j|NWyBn2?V+qEr{1X#?T8cg0?`989 zU?2RG?A@I$>;vM$R^#6M(M?BES2xURw?5D5b#r*cSj|s6xpYo$ZHfgQEa7=ZmCjNf ztWV^0h~`*`%4m6WRg-9i!120$)kbNS{eGQcQ+J!!^F94hnXT1pPA&_h+ ziUEZ!ABu6&NsOb_=%zZtjU3k^!KJ~)R36|jLKElC9rqxtJK)ztnvmiwQoIme?XuLs z=^_)moc1!_iLR0}9 z_Ks+0ltHek-vi9|*Is328Gq(Ki%?$NZwB#_eX*;GHVR8?OqyzKIBKMu4equgs@$kl zWo@scQ`H<~f zriL{Mh}*bK-mtor27PN7bU!9wf37d&f}1(*zS;;xKBiS=1GA<^t&_{^E7}-uCsbUI z0}NaRDz!1&-fd)J7EJ^Zv1W~W!5e5$=wr|m1ztsRzaVu+qNYxBFu(z;!H3Lf{4G@t zRI@Mak7|56%{Ke?pgYV3v?uN+>?^Z`7@r^vq@J)LSmR_gu2OF!7*E13n5BPn5I1~UVi%MaS^$hiMlx@gJ*MYOGDrR(tv81CtMt}*#S~`*Ymw~)?O+87HWPJ+_rNRt;R&t}|V66z#=rF8FE(MiR?ie9G)7Py#Pm%67@ z>U8&p!u{*aK@gS%EFr3=tF0Xdxn`Wf52@fV(QU0ZQ1ZOqkjvBTWq_P*m6r9ifsdmn z(h_Y@2XtDs3VDkNa6;atuEtfzfW8LPoE>4T02n|$ z-VBLY=iWawDs9uZDU~{nnl`zhN91RfAod&)NnG$6Mp_2JBkH}OhOjgUydATy5}2>t z=*E)K+GJ~Km9h`XF1SB>M|w_Z`RCh`K^r)%yfFV@fD#s0Kno5t9jevUX%QV#hdE#0 z&B2M;?UB~4#k5YI1*dnw=!@B1JAkRdP0=98$|>2hF~1hZc>)hffVs*5o?5L>)8O0Z zKMH(s7lQgQFaj!jA?Em6CBRCmW^F{QJr9QyI!&lH7VB*pgq{OTCiqLBFJ-PQ*t`ai z4T&Q>m4=xh<6`)ABnC&oY0F9_6 zgdq2DwC96oH_9zwL$PEvTPR!}XU@Uhdad1_s5GF8=m1$EM}z@qYWx*ZU}|zvY)bs3 zgu6jp68%y{nByszPYw=%Z|%lm!7pFMLvt;73-R-&aa_YB8iZ>MI)4ASJaAuMx7cTJ zC%=DUXn=!}L?ht@w9MQ@vdf%FMEoI~%z>VzT*fgDv>GY^16QIQ6P<8Q;_|;gasBdI z-2Ei3h8Hp09<`rj53s47U-w^maevO?zK^@EE;_vO#02~4HM{nM<}{V%zm>rK1z7Mc z8DBgB3e@HMPQK;bd66ZbzS4If?-cN+Gn*5RiZK=YcgaX&=g5xA<}I5Q6%$7o5Lx23Js*icq(swyw@RJ1behIqSVvo5enxmaX1aGfWAz}cgqPj2a5x?Wmk zd^pZWTz;pPcxh2*tgbbT%$2%uTkD8)d)dh;QwkPu-O^TGr=ja$SJX&LA1U6debWB- zFMHaCTj}1W?b`>W7nj(}UYQ=}&z!sS#htGMRw4Pftt;O9UW(A%JN|sApZ@)U58wZj z^q755Ne^9RQZBA85Pc!fIq(2b{-XqO&-^Ezd1l{|vlm8AoZV9r+fbCBU81Oy$Bc{* z3sOnl1A5v^6&C1THoA=>|efvLrZ|+AA#NjZ!4cT%WEBf=z zrlFF)GOx&>G?f=ic5Qt8ib~q*Ozs0I6f{thP z!CK$c-J_~6D5wSsMZKbj>uNxIVebIObbV(>ZC!DRuBN0oPz`JW9y+vxl}j3Yfx#hz zr@G2u%F6cY8aM{jYea;@w#)>{_Mc?(ccY4qo`Rj(ihYWM(9S0ObjJ<-tcoK<6^Z@r zgCjlvK~Vo;f}P%bX5DCUSL%cr?a#jVtu~dPkueUPcC30FjKpq0OKxLU3mr!f*hi_M zFS+c1O=U*2D}>b>H@o6UYd{yNc8WMqF~-=bFiMSCawW$dPCLAqZ8|D}bO@g|=Kv&> zCKb{nI)ML}HBVsy4mngaR~;}OG0>o35CH!3#iR|efhTrxb4-=CveEzoMzcyM%@T4I zaih4+(p{>A=7QKlw>oyfaVR>F8`C2V7pc)Ms^P7&A{SHObm$S+R^Nb3HLfNt)UyrE z#ZDSbLN4F_?z+aPM&)A4U9M7OxnUaOG|6Z~B-WoDRr$dU4=6@yxF-;y{q045${VmZ zcV;2Z*(LOLwt1<#wk!qAX309IDjJD4HMgreilejvaCM-kI%-Gk^f+7*BI?Q*-}o-| z_DQ>|f$<93JvEwYjaFr3t+0wjfwSfTTI6nH;SI0e zIBm5NAdqyq%4`GcQ9#|?+*030dkwG*afu(XXo1>j&n`65N{bo_drjCJxdDGkXy0_a z5gky6OwiSYO|IlY;q`o69#L%31wF_ufiL&Qb#5WT{)UzYX|u+sR~ZnYYTvfC7Qjq5 z?odR8+kCDN?GuLe0iCASP-CSv7Gr58ApI~W!u$ZC3y397hR1wOeyvVts#Vz) z%7WY>&}`NZ+0%_U}lhKrfX3*$s;0Aba^=7GP|c|zkMVo52%zXrJ)QC zOauc`az(@ovkD^mF|Po0^C}T@AKKFi$7onxQ>!Te^t`1&T})Z?-J$TFem7vTkRl(F z_LOy%YHNY3sjJ^=kjnG(v=+I?%RMgL*5hu&0TmJ4o?54ks*&F8sC6Qj1l;R2w7J}4 z=H@!gfm$G70^mB>JQ|SpsXB9uwR-Sc;wLSJVQs(|)zM+SzY<)}FB$>4j2KvF^guwm zXG@^E*jSB0i1CX5gk~66EgLr%uLBfTVzEVJU`W~Pj|MSVhq8)|Muj>Ez9>4P_t&a8 z3;x`U6ads#$<-FR(X{3G77CcON|m=JHq=^~S0OKly`j#WwSOa3R;E`f!NkjWK(Rvg zc4QeiV8iS7LFg`c2%_Ft7198l0gmKG9a5H2{TyyYTNM?ya_W28i%+0EaA~AWa zJj!6bWk+t1*X{{)+PJjXgp5OFa(z`;huA?cSnh%$7~4Hnu>@pU&yFP;`gOn^4r4xmanNj`_4*2fma5hu z1QSZy9PTPT?|v}a9JOc?M_UQuZX9f|)bn z(N0;MZ5eO|-}v%vW^B_$uA$7c*$gpz|3nV$7MIWx2}ST3uF<$Qxmhus;BVne0yY;) z@x<#Ma-0eh`~PT9bhYd4$zA1NhvVD}u+?3#_vY`r3JOSeq2k*;Io~MX$?ea5bNE#C zo)5lU_~yDjH%U~9cU#|G%?jI2YKE_XY~mKssInOxi|PUYxaQOYZR47MQvK8`(byKn z)WB#x5S-B**le-SK{^GJx;ThG7@C?|rH7UuUK}51e_1DwY}nr!0wfF&xm$eVd_4=q4}@5-_KtmUGeD4)d(O*a$U0` zKe81}p55IcALVzOv?Z(K;|)cOcAWt}k9hj!=l=HgNPou>y8qn4_6P@;Y+zIv=+YW^ z0_nyMmIzS6x;2{-KI@4XKuKB`tn*mCNNs+O<;M=!HjDgb4J-jlyJ@JFXdZ;j&@c-R^b(>kIiRsRySdXK-E)sjkK59X{B0 z9IR0Neks%pPuITUSBv_KF`YN;M;z~kwIE~>&W$I>Q}227^Y@zkAH2s^Dah#alvxZ0 zlbXYsGgYai)uD}tb`9*>zCHiUz4vW-d_{Z~`^*MF2IBHpLw=J1A%%%>n=+0=azQnE8=D+_D#3_0oX#}4j&{*@KyR;&fl z#9@CDu`5@!+ACLL@tK!n-F3bGfpqqr7ixU#qMo4j|jkwrMJ>3xte z|M1rQ^UIDTC}j5^98ECD=AB=3YKRrS_^pcLkiE>lwmr4+p`DS`#)o%CSnWS}k`bhu zgKxFBP~~H^9u5QqHnfJ3Y3D0Jcc?-*VB@cMMv%(H^#`NVV`4(O;<_?w)hip86-6pz zRSZn-n0m_*zE#p}-%I=YfLRdqSP&L~fN*B{#)t2VOQiAS!_S>xOS8#Oh4m|>d5SGd z;q80q$4JT6#{SO6C^}TV8Co_XgF-dIiu_GQ>z41$JNoC~m6opBf$ApaI%ENYHbQ>( zrDpb-LtFlE-@WKdK%I%EFZSe$#+lHE)o!~|F`t~#hxbcpx-Nuprh~AKGkiOo#<+!&6 zF+CnR_+dHTEZWg-c2mP)=z58I8&yGt2??S`T&B0b+gMU7ms5qc+q(zfY(D=xR`yzv zeM5YL5$4X0hqgy_NNg~x%g%xIR=;_DocbibqOpi^8#(#{gdOTE@rnDpU>t%7uGjhG z`PLdet#{VSp|%z2t#rPj0QhI}?qy**w*8Yjf5!t2z=jCaF)fvSU{%BtGjgyr_Z(ev zWF+@(>Tj1XvFSSvyR~~5L)U6{e1{a|w0_#xt?dSV@78>^TmkY3WCBsCv4?hcS3i3G z&{6ibcRy-m*hht_jn9s(cskC^i1TMN8a*N&sO9my_FQU-G<3E%7(oAM(wZ2f70}L7 zWqtXcJ+aQNLmT!zI45iMCN#x8Bauz5HK7`s^Blvs2g4Hf{(2-*mZ1dlL0oD7V7R++ zpuInfLzLorA_y12xD4zqH{7M`p4}N4>-hIc5@&ZP+E_0N2YWjQq@5+ZSC%iWjo&(T z=p`)Xz$pjjTR_iQvzD=`tl*EQ*w>DpU_m%|?%eKkq^nV_6HahC*@haJ)R zWvQok{(EtTY?9^x`_bVE-(J!mOufp^W-BCr5VI12Sr%smo=4JF8UNEX%TU$``bW-q8iYAa*a zX2&J9Sym&`v~4j{8nUh&P7hZ>U0=_|J$0h+$S3wbsy!YQRNCWjSPGF>rqL*pD}20PndCuO&H2@iZ_RrN4C6ycSd zrSW6J)G}@SSp0Z~>>=^bzxnC@`^1W-pH@WUr($e%L%hR16c)q>0>b~gQ-qzj(9JIe z_198v84_P2FEypyI%c_JY_{ZlDsKv(;1Md`vwV5d(;%;ZZrrhCS#m-0837@9O~?~I zAzUpCiHbxY-145-P2NVk?wET=p+qJLN`@pKNWPwU-^6`)^6wPhX}t6B zo#*a+FKvFBEp12Ix9L;U1L=FEQ=~JcbEO4RIP9f=l72^}P}?XC)kK}Yi@9s=UE#ax z?;5=8A2Ld|QD%`jWFDDc)`^a{Pj*svMfR!edpe00(HZmxIz}I$Kcv572xb;j#CVt! z%=^sO%y$`+G9JlzIb(Ikwv3{T#*Ez=Z)E&9DP@v$(#%N@PI`3Gs!8i6H=NHB9wSjZE#Hx@YQ2x7B5&a|NX(;r=S7ru!9kVfpVX&(3DcE6<2R7OR)zOhLjVqpewAP-GMttkY$Y zA&Ia3Yc}ACi2N=$lE__712}U$s*mEXK!J!nku)YyNj^E|WCUl1U9PTSYNx>CfF|1_1hlk{eOmnD+_kkSliAzEWkS>YvfYA?dSwYJ;IMk>eS%(Jbv6^%3FCLV=Z4qO_45bUzg;Y< z=|5;VOp$DilW|%7>^ptz=*YG~_9=1dqpa?ySrYa|bEmCK(_E9@rh4yQz(!dSJ?o76 z)7-GB*xZ)jdRAtx6S-_w%yE_0>KQX^GpO}~m$O|Jl<8A(>Z)Q^CiBokg5jVc&&|L{ z5x;$w^lo9iR=CYWatyN%ertP!N)6fGXu+B{ z?DGa(%n^3F%Mb2qS9)~-t7@~wl%D!%P5IL2G_@ra>$O!@kyXCZRz;N-y4(sT-&@*b zJ1lCletT5)dkz+bUX703}@$9ARfEnFR1qED+BumK**%o=; z21CkZG(Z`9tGGeX5Cxbw115{bWm0FJBY%nXWwTHdxu3m7*(`5|;eM*cEkbmW6PSB; zxwTqb?NFy=sL05ZK7Bg8GPqsdf_~&v$e##AbV`5(xKXm^J zP0C~r8s=toCk5MswZIZ|s9f>6Wm577HdCUOt;!dNMqDRH_xd5R;1WZ_;W_p6T7lN$ zYsB;%vJZ_&S)TBU{fv{HEwg!`N8p|4nXU4z)p;5b9v0quov=piv(X3jUS*Dy{F^m7 zSZ~&bnTG29OPv-M$NuH0_oacN&1u78ujpfIKorKJ%xYF!YpHm-Em^h9r9x&9Og?1? z0Er(I?C_f9F7|2JE3Zq*vHMjLmj3LGk4`g(FSfq_E?n62zI*lzeg3J(BlD@pW+*a# z!#sU|^}P$F@oDeJiFY>8t3LRo`T*tME_pOQ?@PA+5B=Z2b(VSOcW-N=NG-&|MiMW2 zXj{A@Ud)gZ2p1TJ{ed*3;lXGY=d*XF0iXruOlY#m$(tO%(`>eF7YB6s6-k5X-@l(c zo;7JC>}}tnGTyoJ!|V1kJq63UmQlH@^qZG6i`Ev;TOoZuux;-$dgbVwmHVl1k7P|@ zV}Ci5x7WD+xb*$Hog+KwjyB*DP=`KxA)b`6>i%aK60|M|<}24p;8U?W2dbzT7^GQr>S_`dGg1xQvu=fpk`jL6?STJgdvXPKb|7 zL&%gFSv4LHt}ua3;(&QAu5>*T0s(qpNsr&MEP1>H?h4@juuuIVttl9YMq!g~kk=si zxtfm4;>mKEq$pWN%ZA{4{gOsF?8HCARlc>ScBhdQRGWPBETLXoS(B5+u@_n-ujrUo7&&Aam&jqwyn%F1cA!{TTrMP`PenpCBxPGKmFqDcW*7;H9uEnwWt~L zzpp)5Z(`-4xW4e%jdh0t%Z}auZPlT`qGRa)bj_jouS<@i|63~##s9Yp4)RY)V?VLe zCCkkfzswpGrxU#%RLWD z^kM7Hj~FDjxcz=J5}(*KVQ<72qelc@;AAsxM`Q+w_UB$& zS93vTWJ=jg@u;9DRGY;>C1jt_NUokg^pS(HU0&PsY_n)p-I~xz>8_F1?IVqf$}l~! z7NOTRwl3$ra9jJFWc4pVx=y$+KdHo$aUc!%Nul)0zI?vxyJv0EI+=!gT)4y%q8 z=Iw1|>y+8m$e9G(4}#PYqwBHKO@_YO`f6uRy0gUb;PcY?!o~LZ9HiAMZMCqxueONK zzPa1Sju&&Ycw*9BCy<-#8f=WM*Urv7EG2;(4mm7Epjb7`D78=xpt1lVjrsYWf1j3& zY#^D_7BOIRF-z;00H6=Ns%3VsIO_umXtR0zt8{aRfX)O?vjRFQsg$ zSLoHV^W)W_TCefl2QEG=A{(0>^;9=oZnHHo?uL#ZI0R<9+v=$Hr9rEO;YL-uYHl@B zAxh)p92&~nYG)^gq{oDNoS*uo^)Bx)9pw}}@UJ69*09);yKMzjJPTC36QKW$3Wi+9 zD$M8x$HGlgvbtt@**b;jsciY?wbJ=Rinf-R-P=g-iS{=)w~L&DO@WS*A?i@$K-7=s z*x3_q>tI@2V(mwyJ9FN8WNV4Gsv02x^VoNpZGT zQNol~maiz6F6o{B^-xn?T@2(gsu_>WTV0b5x(dMO=nfQoBN@W@-(U%3Nwg;lQ!eLw!TI3YJ+&==Wg~#}<=# zDmyOCgv@Iwk0wxQ$8U=#VG>7Nce=k8(>Oe%=`497dAzr>G*Ccga4nCtrImO;nYk49sqHJ8okz_vsK&D$qVeS&$IWobc!PIfrO}ffyWMV z^+qV{ZX>NNw-m3ItACV1+fZ<;!+Jr~uP!w*#?pu5n`^5@W`VZlCAQeoB8pnwz7W-j zwIyfEIU>X2FW<6aQJF4fGV&PBINb&vAJ`?5X+ z$@h<1Q=FL_GY(pM(*bFO1&79w44az;N%}R$xt1CmJOVD5sK&IAPvEjgm?Ds%D7X!b zex^jRfyhhq~nC(>6ay`gNv;%S`DqReQ%9XUF@ySvu`qc_eb}2YSEmf6sAc1fqRygu< zPE{Wk!~(z&Vw}~^IaSgP^Mvp-aXKp&1oSz<`2YOszxrQ%^FRDQc=4Yn-utKjZ(sZ8 z|FgIL)&JzBOLmD{|0t_q*wqtviQE1tD~A|bUcbD513kR@K+cd_Wbp@JM1VHzbptEW z&CEHl^gWi4vg3}Q``vyTq_#+M<7k)=H)+w+S?ZNJS*t|3>#A40DjjbN`fW~1A#TD{ zV^*pi!5S#(k2m~o5?eVoNz&GA+0?>x%bN4vm=aHWJT8vk zvd+J8con^P?{Uo$>g}`J`@0#B*9K^<+F%-zn1T2w%F8LyuB37{`gi3r#lvN%k4pb~ z`tS*wTqR5WGAv8I`~tRG8R#i}dc@mY)gUQb;}@0I8wUHNZGrAUADw!^-y0a{mjWGm z;`SH72c=dcofM-HA>C%LCu+0SF?$T}ZGJ*pV9qfYpb~R|xwuN2RaeY$xSVb&sWWP& zwKWC>@Vu{T)T-ibz=0`s=c8tKfjfJnboPpsbM>@MtF{Boz+$M?d5qyegWcK0T=9K% z>hIE>x?z1k&eaX*db*^&;qGQ2k(_pigU&F;B`z@I|IP*^@kPRNn^{vy>BYrOSe*!K z#iZV44q55_`k~D$q**x|UfZgPdd#%nWN9x4c2-R}LwaEj$rkHq@?UG6Kc+PXgOS8q zN1@i}fqsp(PEw(mJR_UXJNA5PHoIWrnIA3YJ|?yMpg48Ka#?EjL0RgGQfza@Wa=Zt z{}#*GO5%UfG!`WOlWpt~;uprTAn|`;9V6e>92}DlijN>N&PU zBl+UezBl?1ZsY`{XjLc;=xH{yLA0@KS?+Vx=G@R=9<$=O=A9AghqnFSeM{{aEiY?j zI*P)@FrHy%aXZ?65T`b{WU2i&6PPIBhd5^t=lAa``G_K&Y+SOtvtZk%g1nq+=JlRZ zV3QBE4eX=IsL*GDow7(i6g?&O_@)>CU3U$VO`Y;_{8zjOna^{MRdA z{i5uU>lj(DV#mi{3MfTc!bSEhn~tur8I5_AN|3OURS1nbvG=5_rT;kIx>qf3V^hRx zfwJ0xg}F8C=(M$q$ca6THno@0x$U+971P^89_AeTpc{l_dUtxQhl83GZL26*^AZ(b zFW5cu!O6FOFZ%rZflF7VZ1RH_9*a|};z?UT!>DtB3BJylhQW;#%7&i4^H&|097kVw zJ>+_L?bA;_B1$cO@{!*>y=FaDrxuX68WCTHROzt8fmoJdM>OVWpvKQNue9uxcJ((k z`Dt^s&IZ8$6V2TnOh<2M`-pVF(4udmy#RPZ#D&jtl^fle4-dm&(mi zRKji|kgpe$XC+SIfgyJKH|%ZFor~X^SF*S=Cyy>Fs?IW%i)t($OMt3#IU;W6P{Wa) zZfa!b`utz7&xy~9r!hKY7((&$7(+Cx6$Cw2t%FfJ>^Q^k#`2qq?Ad)8SWv)6vVzb$ z4H=+7In`_A6*`?rudh~>QsdcPcDE{>rP&H|BE%WRfjMKTg;s1M%bmxFFMh@{qTF#nUU4=o__iDc^U@( zSZgg(gIzH|t6cb~^30-X(ifJ^ec%OUPsoH-xp5>H^z&7qUAsrIoQZTa_q8{Qg2Qjw8Y%K~cD|(E z1Li2iHUN!=y0Tl9Kf-jEHLqVQ-Ixt9{Z}fr4wnkT=*=_l91Jp8fdB_hgUM0`bB3s} zX7#2O)aErEyDNaq4rR=yHKmztcCaFg=J`)Ady^V3IsN9l`@;;tXaT99@%-z=Rhw5* zn>KXpDghFs#hEw}^f_jyUbHZJWbqklyh?Irv}wmMGdR?_>r3gm2=E2a#ybvP0Cygo&9#{^19gvU!${n_Eo+`dHcYu zsAqq5Xw<*6u7hb0ceS0OF7KZ6Q2e0>wH3^GeQ#TB7qz>6WCU6wc!|wamB1*rF)FhG zL=$C|USBCg#+xNg{<>35Ow(zW$7=lz4cot9pWFVnDCn{I)KuIpD6etW!)xGkdk}J3 z1Aj0${j9WAzc|iU6^nF6S8bRIx*Q=N(-Q6IIYF^Y1?wJ-Fa3F3>0*&yS(RNbt@f## z>G4irX4V^J(SAVou@4DM zhIk}CR=5QuWLVKkO@6zVCVzTRvO@2vLsB!~T> z-I2~WD7IFx1ffFD#;;c8h}6Xun@Xh>b*lDQQ*dXP-pSH`WETWmcl`My_8xCg?4A=+<$eq(J`0N10FStxfTdyHSzwR#U>+$E?h)X;GtmH z*T&}vs-2bqeL&##AO@9vLHN=!N&F=Na0|4_PQm!nj%}f}4VAvEsH#zTi{EmC$_s5m-Ti=Yo&OXXGh9ucr8_(x66?-)ozm{Hcv$qUgr1!LTMMtQs2Z8WC zJw8qMOvP$uQSnwyJ~iI07L!$+@4`n1hFk|u^uc$*t@eME|7qLr=#8H&KDKE@{8NJ`nA=+WFDn zrQkQQqAe)8M0h7q=4_bp%eMe*4_VuwfWLN)RSY9kB3OC1Kjjj`TYOo5y zy2_YmQ538*VfA2z_l;X1AV69W20$)?K5D^*kfzd$5K3+ZHn4!)`E#n|`7BRsE~BWc z>}i)CJuuMgr@!$f|HZdw-6HAJo;bf`8%3I(R?=ybk$Ty9c7|-7pxPR)W2`aRXY6?4 zJO444=W=s7>4aB>ygse(L!Tx?mFr`#Qh+qdFJjiMs(5vwbY9D|2iDOffc4Dea`9!Z z;}422T0bFwu>JPjLsW)s!K_E6(;R z^h+%8^hu0nxS{@;CNzNhm1eU9Z~}R+8wD`NW(WW#7Gi#SLkMOhAI(w%z|DBzeoKHS zjF(`7@;PX>Pk;gIWwr|gobnUz7Z|KIBd{F`kzsT7jjqNH=HPI{$Udp9&9q}f-{#(x zfyd1vvh<2-{G!oJW!yy_7qGS)R`4ao`?~>RT*#^m< zFP-^nRJ9|&i)kv~99vH1ZZ>CcV7BI|SLaFB)n&Do(RqFQs&-Ny@~13Go>Ec1ezZ1l zSiEZEdby%i=3yTZpZ!XDd`(Y2%?;tS&wpeE>|HZH#v*3Q<8eNu;9V^LahA_`j!K?; zl zy3IS|clfhJBmjs2S9;yEsJcFK+ML@DHbLivkHyVIIX}FSt`w*&z+&LcRZhuPYdo`B z3Q9Nk3=qy3utD1>|b+XQW(ca9Z7- zsKe1nlUu6R?9j9@B;*K=B9o(Vl^|FQ5Y#g{_b}&v)C)nZ1NU&NI=Q>rR|D^+WckL8 z%a@OCJbY+$^zh-0qbr!QaocRaF`p6n_I@!y9vu6Uk^^G+bQZKZUV*<-avHYhwBNJF^h;*~JvAqK( z#e}oFH=ZUda=`@9pVLBa(&lNl4AjQRGbcx`UHc>V+Na{rwNGz+DjYs}CiSb-AIPzT z_SSlUf>^g#Z$Hezp*~7sjqIXZ#v&HfgGq96_cz~Gc+a}BH8!g;<{^uwo&3d)X8S_NIR?R3W_RgiVC~p z8O{|nS+iwDTmXlN5w=f*tTTIbUXfq5vThx`y=(k22x$*Gf>%C|>deO-BUbKb0M%;~Twt>QaZ(~Q>?|a-muI|_Y@^9j|1mjoB zmuy%n&5f2Ii;lE@GQ5xOYU%WmmV#sh`=pHA>)7wyOOx;;{0hbzhu4M60}qw_lr8v> z-TLkQCcV&~`Xk#wCVDY+I-KjTlG?IMU=CM;gbO)(p-xRM;WL z&A7ipM8h;$xQ!HeYh>h+O{4jHHG_q%k-@x!!9iaK8IXM>Cco;fOPTEFOvjuvizYb; zGmJJQbC5%06Z&(3S6p=&PX|%8l5Oi`t9S5@o@JS{NvxRE>>48mR0{SFiV4HNW8Ig? z0M+QO$iXc2lx>Y#I$j7X6}jh&bIZ>!*&jKdJy1S)`uF5e)_d|jq241s@5dS%&AZ6d zIdixxl00_e8%gX$Y^R+`Vz-h)*EeEPXwr%C#-Z|&MjLkzLc}^^q`7JQ1VsbxAnYwY z0n28H6aaSPuc-K!ao!Nua(oFwK7>>0`(9GfsiPGFxDqj4dK z*{c&e*gwl-sYiOrGYh+lN88%=@09m&6Gxe3j`cB{mL|gyX`eS5@EzZ@k;GJc22(BB zQQqMj3?9q_GBnv<-C7y)d^-QT+BZqOMk}G!l1MlHJ<^TIF&ppT8%YPzyz5RUv0jpk z2#AF~;hKi?WI|-7%wCd}L#Ddq$~h$ZzJ(?cAnJ3Ff4{_Tx`aEO_9s$mwc1Epmxty9 z8dIXLTu=KUkv7A77CAm50v|oi1pZ}mABj20hXG(4`SzN@yxlDSOl}|fS23GGnq=*G zms|tGZ{fNkCdVEBIc@1!ns7W_gZdGP;v}uy1WE9IL}mX>l;?S+#FM-qud&$oTmGMk zJCYv9WeyQC-YdjYC>cC3v*EW{IQ|h{fOr_&=XvX{UBf;G|E`V$vhTgZ%Xblk@<#dx?knnZ&dFL)XSokBEPaxNDr` z+F$s4uYJX@yY>VB5HXXtiCE2BNAR%C!1eD$ArjBnhu_8sKChmb%D;t}%IigWlt|}& zPK@VMgp@}TQsVE|cJaO^?&1+dO42kUlYa*>o%dH_3ZGAm=lzW1UnA0ZTZp@P&!FCa z5V!HRU;7(>@Y-K_yRLo5+j(t_H$tS~y7%DvL2RYC_Tz~*{E_%I+WkY~nQPBt`z6XJ z{JV%(@%!z>Tg2nMY_x9!uK&+OnZchzr1K}?-f-_I+?M<8dHyrRL%e0gZxYXwP0%=x z#(6W6z9jO-%}4u{;$1GpzE_Z%_#13r!}q(feUXq6UAUhY2%2CM-)UX}@dEKF-ZzfJ z`9xB~wSzcsBHEtf+I-x4;z86W;a8*G&^Ej&#Dqj!jG;a5#y!1?=fpeai--kD4q{y5 zoqln>|8Vb%|3#whXC>O=USc|*hj#t~^}LFH@MxmX%;J5CHvN%!4t3p$zW6|*k8u6u zzZUeFM1SG>%#D)hFI=CwUT(kHSGarsWl8iGuCM&EaDC-wf8qMY|E#p2PjY?amxXHw z67L!u5||7OsEX=p)2O#M8Xzh-o|p>VFmOSxP*B@8!hz#6!gQ z*ZvJ{f__3AM*a8ko=@Dzy*%@^pLiDuF)tV6@oVBSo(Fw$2NUnXzza4Vo z9pVwZ>wEc2@J?rn~ccO5=-NW_M8{hwrj?2LBQ@A!y zv_IO1Yoq^G+HgIzS)#qTHoIA#!Tob>_6(7ULUC<+v%R=B`%mTP8{g4p{9lwroBa`W zqU|6PGXK-K;l|7jS^F<}`-}0D#K~Qho8#!F+~s6%LjH2H_hz{2@=-Oci^ zamUH#n}r*HH%m3%=}me4%kjv`YOcs2Yn{Y>Nl9q0@wm?)v9Ag9%`4~^|Ay;)gnOKf zF~P~-Cm<`6Fa|V4GJgSN@%1^5o9AZnAI7+Ytc9GVc`sr6r)z&B{*2Fjl=bMd%dwT9 zti81s9t#W8-y@me7lzQ*{DK(4%t z?U(4^9}$vqYcRflM4dkpN|d=M52A2$4|iWrpv*>DdgJrs*ruUON8!fJ{V0=B)}t&$ zfBs+U`&@rVnU3SHj{(Stf60vh4R!o-3?;_S4Vm*VxpQ+2VVjUYkU@CIQ&8xe@`sZ_ z2|2{cpqu69xPlzwWYJA|l#neq<!|0ir0-q`m$Y%iglNBIEds~g3MtqbKHlxoz&ol{5r zCJDzU{{f#rzg{puLkQ#Zf2|+qB=&K2bJw_t^2_?Uy18qdMY(>B`;tDsahwf`{fX~9j-#c&oo|O28cEB&UC;kc&e}OcCJ!lvFO(X6io*JWAAU@#%VvqL(?^)g}yd^jrHQc%f z_lxaqE3R+xgo*t;?TziXH@072-zLqvz8$ye#gE%7Y7atM7EB;daGx;krlbl7) zzkU=sCvnt7@@aA*xq&PtO=OfDCQp%<$!}ALlwYMxPI)+GZpxaJ{1kPHC#5}QPs+LL zXQm8ZzmGc$uW!@9Mb2G6Z5v7mpGA;dMf_rZ3BQzI#xLhr@a233zml)ySMjU)Dt--L z&DZd?{93+_ujd>1M!tz}=3DqyzKw6^JNQn%i|^)p_+Gw`@8<{jL4JrI=12H-{3ySk z-@uRY8~IKAW_}C5mEXp1=XVhNv`k#{<`s+nf4L^_&d>0y{5!t{?eyn-0sj^rOMJ!q ziT4j)ocA;D-+BM!T|<}U@%hBhya~Ki-W@y%ZzAtbUK%f*C*@JRyLd7l&0}~Oyh*&t zyeYg)-c;T+-gMp!-rc-=cr$qq@Wp%~U&K%5jq#r5ZQ%WySIR5lv*ep z>v?N=8+n^~TXa07P8C z6Y=0uQ7&2VN=?L7F$H7s?hrCdOEXhDH7(05(+>N(Z@bOP%B<}8%+$>CDzZ%X|9fV4 z*>*jm6d6co0hq z^c21E<4r0LauX9_$IzGZ^8PHn2^6ARojB^BlAq zL)jU27Oe>9KXJhouHjm)<34CreDRgxkk=3tpN$83eTOjYG*Zj<_STyp=xtv8|3Ey% zK@jnOehS9Js0Gub9oEVIi^2w>6`hXfA$XUIIt)Oa4rJ6GXhb>ub5Nr#(6&cntE^Zt z8SUjDHk7xJ*F0_j#UL>W=b@|u=R6s1vkXTuJZirSJZ4?T-es8L7;y|dt5iM*R4 z?TGOv5=(Q0yfFobq>=2z{AN<|DX258$KFvXA7sJddM)zzg{> zUc}A3n3wS34!;o&N^dly5Oz3X7>*d+!{&O8(OV27WY}|4x5qpJaTAx`LV8djPvhBS zfqu0}5FJIl=p-V=Wg<$n6{?69?L>@dFFJ@=hhLn7(i=@jgpHN)#N!%|c-&*~79tk0 zbwa9WB0@z= zhhHlPr8k-|gl#F~X^m@Z#N!@=w-7B6TR2kn^O~l&5UmiiH-CHDt&l46!9>XGY|8(8 zJ)J8V-fE*+wIpkbtYJ+^b;vv%)np0cXf17HC1hO4#E@|gzcvoPks*ckeonfqkTlx% z*&}R5NNh-t27Zwtp&^M4{6a%mNE=T-cepC1y5d>-})+0VEce$T?s9`4?AC?btZ;79(e9W+Qw`Ym*ed!q4b_|5=@ zlUEVE&sYJ!F%-4rX&jz%Jt$tqGdGUJk?NpH#r;4Wv95TG9gXNg8AIJda$`K>!FzG+ zbE69nMh_^MO2E#8F!liAAHhhhFm_`flRZf`I{QmZm(+?hU((n#qO7T20NHCEHeN%!zuxMH70ZLCu-Euad^NwHZ{g4K zovhg^cb;cD~)?-vh?En=H^Uc4&a5L2nzuBcYW8aO zYmR9C(zeh>Y7?|++Fb1z?KJJx+FP_MwfAZ_Xg6!OXrL^n^jKzEC7t!|6%W!+BQH@aVRXMF;EqI?p4 z`uXJhjPt4Rxz=Zy&sv`?J}>+1^x5lk*yn`LpL(G;=#Ba|`gZzweX>4PpP?V3FVc_J zPtZ@*SLx^JYxPU?EA)5k@7F(~e^URv{&oF(`d#`j_51XP^(XXy>d*QLU!AYP*T~S1 zU?iIItZ#$+64;6XurnfH@BP6?p=QF+qeCr<@vvA^(R#P$z1g4a zA&kw;g+)9P)=%D=6?{&hKk*lA>H^p^0r;MzXD89WI0GBI5Y|bcu)^n8^f%7J<{k!nCrDHx?cdP< zu)zi|g8dVW=Q{o?;5mnzVGSAa{5$_maMc1GL+o)mUg zER|d>16K-X;#Tmba4wch&Tf;OtpH~V|4G~q-V_W%td!iXlH9EZcM4a;9pDfB5pgFt zRJc~$1s*l*R<09wa~0{{Be}g7+$!8htl=>jsn_# DB!a9?pB?*OWGG6(Br4(^vZ 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 b@rvx{R(HC4Mz=S2)U{9X8!|6r@ACfxksGVN diff --git a/fonts/catfranken-deutsch.ttf b/fonts/catfranken-deutsch.ttf deleted file mode 100644 index 05937f5bc8e5ea1dcefa97a9b2d493f623695ad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108136 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 z 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